char的赋值不兼容类型?

时间:2010-02-03 10:47:01

标签: c++ string class arrays constructor

我收到此代码的错误。 '将char赋值给char [13]的类型不兼容'我无法弄清楚如何初始化这些数组并使其工作。基本上,该程序采用ISBN代码(4组整数,并在每组数字之间创建一个带有' - '的字符串)并验证它们是否正确。该程序使用ISBN类和主函数来加载实际的ISBN代码,并尝试使用ISBN类来测试它们。这就是我所拥有的。

class ISBN {
private:
char group[6];                          
char publisher[8];                     
char book[8];                      
char check;  
char isbn[13];
char compute_check();

public:
ISBN();
ISBN(char newisbn[]);             
ISBN(char group[ ], char publisher[ ], char book[ ], char check);                                       
bool valid();                           
char *getpublisher();                  
void print(ostream &o);                 
};

ISBN::ISBN(char newisbn[]) : isbn(newisbn) {}

程序加载这些ISBN号,然后按照以下方式使用ISBN类打印和测试它们......

strcpy(isbns[index++], "1-57676-074-X");
ISBN isbn(isbns[i]);
isbn.print(cout);
if (isbn.valid())

我无法将ISBN代码转换为ISBN类,因此可以通过这些功能对其进行操作。任何帮助非常感谢!谢谢!

4 个答案:

答案 0 :(得分:7)

此:

ISBN::ISBN(char newisbn[]) : isbn(newisbn) {}

没有做你想要的。尽管你可能已被告知,数组与指针不同 - 这里的构造函数采用指针(伪装成数组)并尝试使用它来初始化实际数组。你需要:

ISBN::ISBN(char newisbn[]) {
   strcpy( isbn, newisbn );
}

我还建议调查std :: string类以满足一般的字符串处理需求。

答案 1 :(得分:2)

ISBN::ISBN(char newisbn[]) : isbn(newisbn) {}

您无法通过char *初始化char [13]。

您必须逐个字符地手动复制:

ISBN::ISBN(char newisbn[]) { strcpy(isbn, newisbn); }

答案 2 :(得分:0)

C++中存储字符串的直接方法实际上只是

const char* group = "Group";

如果您需要额外的字符串功能,请查看string class

答案 3 :(得分:0)

在C / C ++中,您可以将数组视为指向数组第一个元素的指针。因此,在构造函数参数中使用指针,而不是数组。 E.g。

ISBN::ISBN(const char* newisbn)
{
    strcpy(isbn, newisbn);
}