不兼容的转换字符

Posted

技术标签:

【中文标题】不兼容的转换字符【英文标题】:Incompatible conversion char 【发布时间】:2015-01-21 19:15:04 【问题描述】:

我的代码有一个小问题,由于未知原因编译器弹出两个错误,导致我无法编译以下代码。我收到的通知是:

多字符字符常量[-Wmultichar]

将 'int' 赋值给 char[4] 时的类型不兼容;

这很奇怪,因为我将 char 值分配给 char 变量。我究竟做错了什么 ?

 #include <iostream> 
 using namespace std; 

 class People 
  
    public: 
           int age; 
           char name[4]; 
 ; 

 int main() 
 
    People arrayP[5] = "Paul", 29, "Sue", 31, 
                        "Jack", 22, "Nil", 32; 

    arraP[4].name = 'Ope'; 

    for(int i=0; i<5; i++) 
     
        cout <<"Name: " << arrayP.name[i] << ", " << arrayP.age[i]<<endl
    
 return 0;
   

【问题讨论】:

这远不是这里的严重问题。 您不能以这种方式分配给字符数组(C 样式字符串)。您应该改用std::string(或使用C 字符串函数,例如strcpy)。此外,[i] 应该在 arrayP 旁边,而不是在成员变量之后。 【参考方案1】:

你有两个错误:

如果你使用aggregate initialization,你必须遵守类定义的相同布局。所以"Paul", 29 不正确,而29, "Paul" 是。

char name[4] 太短,无法包含 "Paul",因为 NUL 终止符没有空间。由于您使用 C++ 工作,只需使用 std::string,没有任何借口。

【讨论】:

以上是关于不兼容的转换字符的主要内容,如果未能解决你的问题,请参考以下文章

java:不兼容的类型:T 无法转换为 java.lang.String

不兼容的类型:java.lang.Object 无法转换为 java.lang.String

0c-42-ARC模式下如何兼容非ARC的类

BlueJ 错误:“不兼容的类型:int 无法转换为 java.lang.String”和“不兼容的类型:java.lang.String 无法转换为 int”

将 'NSString *' 转换为 'CTStringRef *' 的不兼容类型

“不兼容的类型:void 不能转换为 ...”是啥意思?