#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”的示例匹配参数列表。我不明白为什么以及如何修复这个问题。
2条答案
按热度按时间hmtdttj41#
编译器将student视为结构,更改student结构名称
elcex8rz2#
实际上,struct与class类似,只是它的所有成员都是隐式公共的(而不是private)。因此,您对“student”类有双重定义(一个用class定义,所以它是私有的,另一个用struct定义,所以它是公共的).结果当你试图定义第一个类的构造函数时,编译器在第二个公共的“student”类中找不到它的声明.同时,我的编译器(MSVS 2019)检测到双重student定义并报告它(在抱怨“无示例...”后报告双重定义是真的):
如果您更改了结构体的名称(例如“struct _student {”和“_student stu;“这两个错误都解决了,因为编译器在正确的学生类中查找构造器声明。所以不是第一个显示的错误,它才是真实的的罪魁祸首。