回 帖 发 新 帖 刷新版面

主题:C++ 求救 error C'2040'!!!

<code>
    const char *p="123";
    string(p);
</code>
main函数中代码就只有上面两行,但编译时会提示出错,
'std::string' differs in levels of indirection from 'const char *'
百思不得其解啊...

回复列表 (共4个回复)

沙发

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 *

板凳

const char *p="123";
string(p);
这里单独的 string(p) 被解释为 string p; 也就是变量定义。
(规则是:能被解释为声明定义的,就优先解释为声明定义,而不是执行语句)

const char *p="123";
string p;
的错误很显然,变量名重复定义了

3 楼

举个例子
int a = 1;
int b( int(a) );
int c( int(1) );

其中b是个函数声明,它等同于 int b( int a );
而c是个变量定义.

4 楼

const char *p="123";
string s(p);

我来回复

您尚未登录,请登录后再回复。点此登录或注册