【问题标题】:incompatible types in assignment of char?char分配中的类型不兼容?
【发布时间】:2011-01-12 13:48:04
【问题描述】:

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

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 类以便它们可以由这些函数中的每一个操作时遇到问题。非常感谢任何帮助!谢谢!

【问题讨论】:

  • 代码中的哪一行给出了错误?

标签: c++ string class arrays constructor


【解决方案1】:

这个:

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

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

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

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

【讨论】:

  • 谢谢尼尔,这正是我需要知道的!
【解决方案2】:

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

你不能用 char* 来初始化 char[13]。

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

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

【讨论】:

    【解决方案3】:

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

    const char* group = "Group";
    

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

    【讨论】:

    • 你知道这不是很安全。它保留在静态内存部分(如果我弄错了名称,请纠正我),每个拥有十六进制编辑器的人都可以看到“组”字符串。不要那样做。
    • @the_drow 1) group 可以在运行时设置。 2)但那又怎样?这不是private 的意义所在。
    • 1) 不,它不能,它是常量。 2) 什么私人的?这与 OOP 无关。
    • @the_drow 你混淆了const char*const char[]
    【解决方案4】:

    在 C/C++ 中,您可以将数组视为指向数组第一个元素的指针。所以在你的构造函数参数中使用指针,而不是数组。例如

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多