【问题标题】:This Pointer error No instance of constructor matches the argument list此指针错误没有构造函数实例与参数列表匹配
【发布时间】:2019-03-27 20:08:02
【问题描述】:

请帮助错误:没有构造函数实例与参数列表匹配。 也请帮忙解释一下“strcpy(this->name, name);”

class Student {
    char name[50];
    char surname[50];
    int age;
public:
    Student(char name[], char surname[], int age) {
        strcpy(this->name, name); // please explain this line what does it means?
        strcpy(this->surname, surname);
        this->age = age;
    }
    void Show() {
        cout << "Name: " << this->name << endl;
        cout << "Surname: " << this->surname << endl;
        cout << "Age: " << this->age;
    }
};

int main() {
    Student A("Ivan", "Sidoroff", 25);
    A.Show();

    system("pause");
    return 0;
}

【问题讨论】:

  • 1) 您显示的代码compiles just fine。 2)strcpy的作用在strcpy的文档中有说明。
  • @AlgirdasPreidžius 您需要打开警告,然后 ISO C++11 不允许从字符串文字转换为 'char *'
  • @NathanOliver 我认为在 C++11 及更高版本上这是一个错误,而不是警告,并且由于我使用 C++14 编译,我认为如果有任何此类错误,它不会编译。 :/ 诅咒你 g++ 和你的非标准扩展!
  • @AlgirdasPreidžius 如果有帮助,我在编译时总是使用-Wall -pedantic。我也使用 Wandbox 或 coliru,因为您实际上可以指定所有选项并查看所有警告。
  • -Wall -Wextra -Werror -pedanticftw

标签: c++ constructor this-pointer


【解决方案1】:

请帮助错误:没有构造函数实例与参数匹配 列表。

而不是这个:

Student(char name[], char surname[], int age) {

试试这个:

Student(const char *name, const char *surname, int age) {

它抱怨是因为 char 指针与指向 const char 的指针不匹配。

strcpy(this-&gt;name, name); // 请解释一下这一行是做什么的 是什么意思?

它将字符串从name(传递的参数)复制到另一个name(这是class Student的一部分)。由于两者都称为name,因此含糊不清。在这种情况下,name 引用参数,this-&gt;name 用于引用 class Student 中的字段。

更一般地说,this 是指向调用函数的对象的指针。

【讨论】:

  • 感谢您的回答...我已经尝试过您的代码,它确实很好,但另外它需要从 strcpy 更改为 strcpy_s。现在可以了。
  • 也感谢您对strcpy的解释...为了避免歧义,我记得我老师的课使用下划线:_name(传递的参数)。
猜你喜欢
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多