社区
C++ 语言
帖子详情
string作为成员为何不能被操作?
cimstu
2008-02-22 04:32:07
我的代码如下
A.h
#include <string>
using namespace std;
class A
{
private:
string m_mystr;
public:
getstr(string str);
}
A.cpp
A::getstr(string str)
{
m_mystr = str;
}
上边的代码编译的时候可以通过,运行时会出错,而且不光是不能赋值,对m_mystr的任何操作都会出错,请问我是遇到了什么高深的问题吗?
...全文
183
13
打赏
收藏
string作为成员为何不能被操作?
我的代码如下 A.h #include using namespace std; class A { private: string m_mystr; public: getstr(string str); } A.cpp A::getstr(string str) { m_mystr = str; } 上边的代码编译的时候可以通过,运行时会出错,而且不光是不能赋值,对m_mystr的任何操作都会出错,请问我是遇到了什么高深的问题吗?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cimstu
2008-03-03
打赏
举报
回复
很感动大家能这样关心我的string,呵呵我发现错误在哪里了,上边的代码是我现编的,就是那么个意思。如果上边的语法无误的话。其实应该是可以正确赋值的。我的错误是你们谁也想不到的,呵呵就不再那出来逗大家乐了。感谢!
hao507
2008-02-26
打赏
举报
回复
8楼的解释的很详细了,不需要再补充什么了~~~
tsst
2008-02-26
打赏
举报
回复
楼主的写法有问题,基础知识不扎实!呵呵!潜力很大
fish6344
2008-02-26
打赏
举报
回复
的确如此,getstr有误导语意。
运算符科技
2008-02-26
打赏
举报
回复
都是猛男。。
建议函数名getstr改为setstr,我看着总以为你是要得到值。。
ShardowM
2008-02-25
打赏
举报
回复
class定义后应该加分号,getstr函数没有返回值。
fish6344
2008-02-25
打赏
举报
回复
把你贴子中的类声明稍作完善,粘贴到我的几个编译器上:
class A//没有构造函数(当然也不需要)!在A实例化时,m_mystr是一个空的string实例(缓冲区无字符)
{
private:
string m_mystr;
public:
getstr(string str);
};//完善一:加';'!
A::getstr(string str)
{
m_mystr = str;
cout << m_mystr << endl;//完善二:纯演示赋值操作结果!
}
在如下程序中:
int main(void)
{
string _s("Good!");
A _a;
_a.getstr(_s);//输出"Good!"!
_PAUSE;
return 0;
}
BC6.0编译器仅有一个警告"W8070 Function should return a value",程序经编译链接,正常运行;
VC7.1编译器同上,警告" warning C4183: “getstr”: 缺少返回类型;假定为返回“int”的成员函数",程序经编译链接,正常运行;
上述二个编译器仅按语言规则,视你的getstr函数因无返回值类型声明而使用缺省的返回值类型,就是int!只是给与程序设计层面以警告,而顺利编译链接,正常运行!
在GCC编译器上,上述未指定返回值的问题,造成编译时错误而不能Build,这是因为GCC尊从C++98标准给与上述代码以否决!在此,为getstr函数加上一个返回值类型,例如:
class A
{
private:
string m_mystr;
public:
void getstr(string str);//增加返回值类型声明;
};
void A::getstr(string str));//增加返回值类型声明;
{
m_mystr = str;
cout << m_mystr << endl;
}
上述程序一如BC和VC编译器,顺利编译链接,正常运行!
综上所述,string作为类成员并非如你所说:"不能被操作?"!string作为STL一部份,其实现目标就是为了使string象其它C++内建类型一样,安全、方便!(见《C++标准程序库》page471)因此,作为类成员的string对象变量,具有良好的可操作性。
hemu1190
2008-02-25
打赏
举报
回复
建议多看看书吧!
visame
2008-02-22
打赏
举报
回复
对呀,这个程序肯定不能同过编译,除非你的编译器有问题.
至少两处错误:class定义后应该加分号,getstr函数没有返回值。
理论上应该不会出现别的问题。除非你的编译器有问题。
ssdx
2008-02-22
打赏
举报
回复
我觉得楼主,你最好把你完整的代码帖出来。
Treazy
2008-02-22
打赏
举报
回复
函数的返回值在哪?
gccli
2008-02-22
打赏
举报
回复
不知你的A.cpp里有没有
#include "A.h"
还有class A{
};//要以';'结束
还有,C++有一种“迟缓型错误检测”机制,所以有时候编译时不一定检查出,只有运行时被触发后在能检测出来。
“迟缓型错误检测”,这是提高程序性能的一种策略。
ltc_mouse
2008-02-22
打赏
举报
回复
class A{
...
public:
getstr(string str); //这样可以编译通过?Dev C++提示需要返回值...
};
增加void返回值后,测试代码如下,Dev C++是正常的
A test;
test.getstr(string("Hello"));
相关推荐
final关键字
1.类 final class
不能
被继承 2.方法
成员
方法
不能
被重写(public final void) 3.变量 变量只能被赋值一次;
成员
变量:意味着赋值的
操作
必须要在声明变量的时候同步发生(final
String
age=8;) 局部变量:赋值可以不和声明变量同步进行 ...
java基础学习----
String
旨在从内存方面看
String
类的知识点: 1、为何
不能
被继承(final类) 2、字符拼接时,
String
类的内存分配问题。 3、
String
的intern()方法 关于
String
类经常出现的面试题: 问题1:
String
s1 = “abc”;
String
s2 = “abc”; System.out.println(s1 == s2); 结果:true 问题2:...
字符串
操作
和final关键字
final关键字的用法 用final修饰的类
不能
被继承(完美类),用final修饰的
成员
方法
不能
被覆盖(完美方法),用final修饰的
成员
变量
不能
被修改(完美变量) 字符串
操作
public static void main(
String
[] args) {
String
s=&quot;I am a student.&quot;; //返回字符串的长度 int l=s.length(); System.o...
java jls8_java基础学习----
String
旨在从内存方面看
String
类的知识点:1、为何
不能
被继承(final类)2、字符拼接时,
String
类的内存分配问题。3、
String
的intern()方法关于
String
类经常出现的面试题:问题1:
String
s1 = “abc”;
String
s2 = “abc”;System.out.println(s1 == s2);结果:true问题2:
String
s1 = new
String
(...
Java:
String
、
String
Buffer、
String
Builder
1.
String
:从
String
类的源代码可以发现
String
类是final类,也即意味着
String
类
不能
被继承,并且它的
成员
方法都默认为final方法并且
String
类是通过char数组来保存字符串的,对
String
对象的任何改变都不影响到原对象,对其相关的任何
操作
都会生成新的对象。 2.
String
Builder:从
String
Builder类的源代码可以发现
String
Builder类是final类,也即意味着
String
Builder类
不能
被继承,并且它的
成员
方法都默认为final方法并且Str
发帖
C++ 语言
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
6.3w+
社区成员
25.0w+
社区内容
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
帖子事件
创建了帖子
2008-02-22 04:32
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下