gpt4 book ai didi

c++ - (C++) 字符串文字与参数列表不匹配

转载 作者:行者123 更新时间:2023-11-30 04:58:15 26 4
gpt4 key购买 nike

我正在阅读 Tony Gaddis 的一本名为“从 C++ 开始:从控制结构到对象”的 C++ 书。

有一个我遇到错误的编程示例。该程序为一个带有两个参数的类创建构造函数。这两个参数是指向字符的指针。这是类(class)的一部分:

class ContactInfo
{
private:
char *name;
char *phone;
public:
ContactInfo(char *n, char *p)
{
name = new char[strlen(n) + 1];
phone = new char[strlen(p) + 1];
strcpy(name, n);
strcpy(phone, p);
}
}

创建 ContactInfo 类的对象时,程序会将这些值传递给构造函数。

ContactInfo entry("Kristen Lee", "555-2021");

这一切对我来说似乎都有意义,但在将“Kristen Lee”传递给构造函数时出现错误。错误说:

“构造函数“ContactInfo::ContactInfo”的实例与参数列表不匹配。参数类型为:(const char[12], const char[9])”

我不明白为什么会出现这个错误。我唯一能想到的是我们试图将一个值传递给一个保存内存地址的变量。但是,我对编程知之甚少,无法知道是否是这种情况。如果它根本不起作用,我怀疑这会出现在教科书中。也许这是一个 Visual Studio 问题(我正在使用的 IDE)?我真的很感激我能得到解决这个问题的任何帮助。

最佳答案

字符串文字(例如 "Kristen Lee")是一个 const char*:它不能被您的程序修改。由于 ContactInfo 的构造函数仅采用 char*,因此字符串文字不匹配。

这是在编译器消息中列出的:

no instance of constructor "ContactInfo::ContactInfo" matches the argument list. Argument types are: (const char[12], const char[9])

此处编译器告诉您函数 ContactInfo::ContactInfo 不匹配,并且您作为 const char[12] 传递的参数>const char[9].

您的问题可以很容易地通过使用 std::string 来解决:

#include <string>
class ContactInfo
{
private:
std::string name;
std::string phone;
public:
ContactInfo(std::string n, std::string p) : name{n}, phone{p}
{}
};

请注意这让您的代码变得多么简单,因为您不再需要 4 行代码并管理您自己的内存。

关于c++ - (C++) 字符串文字与参数列表不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51758805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com