没有重载函数的示例与指定的类型匹配(C++)

y53ybaqx  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(346)
#include <iostream>
#include <string>
using namespace std;

class student {
private:
    string sname;
    float gpa;
public:
    student(string name, float g = 0.0);
    ~student();
};

struct student {
    string name;
    int gpa;

    void display();
};

student::student(string name, float g) { // **this is where I get the error**
    cout << "student constructor is running..." << endl;
    student stu;
    stu.name += name;
    stu.gpa = g;
}

student::~student() {
    // cout << "Student No." << endl;
    cout << "student destructor is running..." << endl;
}

void student::display() {
    cout << "Student Name: " << name << endl;
    cout << "Student GPA: " << gpa << endl;
}

这是一个学生头文件。出现错误:没有构造函数“student::student”的示例匹配参数列表。我不明白为什么以及如何修复这个问题。

hmtdttj4

hmtdttj41#

编译器将student视为结构,更改student结构名称

elcex8rz

elcex8rz2#

实际上,struct与class类似,只是它的所有成员都是隐式公共的(而不是private)。因此,您对“student”类有双重定义(一个用class定义,所以它是私有的,另一个用struct定义,所以它是公共的).结果当你试图定义第一个类的构造函数时,编译器在第二个公共的“student”类中找不到它的声明.同时,我的编译器(MSVS 2019)检测到双重student定义并报告它(在抱怨“无示例...”后报告双重定义是真的):

Severity    Code    Description Project File    Line    Suppression State
--------    ----    ----------- ------- ----    ----    -----------------
Error   E0493   no instance of overloaded function "student::student" matches the specified type    Test    C:\Users\Projects\MSVC19\Tests\Test.cpp 42  
Error   C2011   'student': 'class' type redefinition    Test    C:\Users\Projects\MSVC19\Tests\Test.cpp 35  
Message     see declaration of 'student'    Test    C:\Users\Projects\MSVC19\Tests\Test.cpp 26

如果您更改了结构体的名称(例如“struct _student {”和“_student stu;“这两个错误都解决了,因为编译器在正确的学生类中查找构造器声明。所以不是第一个显示的错误,它才是真实的的罪魁祸首。

相关问题