主题:C++ 求救 error C'2040'!!!
josephkwok
[专家分:530] 发布于 2010-10-18 23:12:00
<code>
const char *p="123";
string(p);
</code>
main函数中代码就只有上面两行,但编译时会提示出错,
'std::string' differs in levels of indirection from 'const char *'
百思不得其解啊...
回复列表 (共4个回复)
沙发
aiby [专家分:15340] 发布于 2010-10-19 06:35:00
string(p);
//这句语法错误,string和char *是两种完全不同的类型,无法共享一个内存,必须拷贝过去。
const char *p="123";
char cstr[4];
string s;
s = p; // 复制C风格字符串
strncpy(cstr, s.c_str(), 4); // 获取string中的C风格字符串复制到字符数组,s.c_str()类型为const char *
板凳
bruceteen [专家分:42660] 发布于 2010-10-19 08:50:00
const char *p="123";
string(p);
这里单独的 string(p) 被解释为 string p; 也就是变量定义。
(规则是:能被解释为声明定义的,就优先解释为声明定义,而不是执行语句)
const char *p="123";
string p;
的错误很显然,变量名重复定义了
3 楼
bruceteen [专家分:42660] 发布于 2010-10-19 09:05:00
举个例子
int a = 1;
int b( int(a) );
int c( int(1) );
其中b是个函数声明,它等同于 int b( int a );
而c是个变量定义.
4 楼
tianyuan008 [专家分:14360] 发布于 2010-10-20 08:37:00
const char *p="123";
string s(p);
我来回复