类:编译器错误«无匹配函数可调用“构造函数”»

时间:2019-04-09 11:47:21

标签: c++

我是C ++的新手(也是stackoverflow)。不幸的是,我个人不认识C ++,因此以下问题可能太简单了。但是,如果我可以请一个朋友查看我的代码,我不会发布它。我真的很绝望。

因此,基本上,我正在尝试链接3个课程:课程,老师,学生。老师和学生的课程在课程内部“直播”。但是,当我在Course内部创建Teacher对象时,会弹出一个编译器错误:“没有匹配的函数可调用Teacher :: Teacher()”。

我真的看不到任何错误,也无法真正掌握编译器消息。请在下面找到我的代码。对代码的墙感到抱歉,我已尽力抑制了一切。

我欢迎任何评论和批评。

非常感谢您。

class Teacher
{
    private:
    string fName;
    string lName;
    int age;
    string address;
    string city;
    string phone;

public:
    // Constructor & destructor
    Teacher(string fName, string lName);
    ~Teacher();

    // Setters & getters
    void setName(string fNameIn, string lNameIn);
    void getName();

    void setAge(int ageIn);
    void getAge();

    void setAddress(string addressIn);
    void getAddress();

    void setCity(string cityIn);
    void getCity();

    void setPhone(string phoneIn);
    void getPhone();

    void GradeStudent(); // outputs an appropriate message to the console such as "Student graded"

    void SitInClass(); // outputs "Sitting at front of class" for the teacher and "Sitting in main theater" for the students.
};

Teacher::Teacher(string fNameIn, string lNameIn)
{
fName = fNameIn;
lName = lNameIn;
//age = 0;
}


class Course
{
private:
    string name;
    Student students;
    Teacher teacher;

public:
    // Constructors & destructor
    Course(string nameCourseIn);
    //Course(string nameCourseIn, Student studentVecIn, Teacher teacherIn);
    ~Course();

    // Setters and getters
    void setName(string courseNameIn);
    void getName();

    void setClass(Student studentVecIn);
    void setTeacher(Teacher teacherIn);
};

int main()
{
std::string name = "Intermediate C++";

Course course (name);
course.getName();

return 0;
}

1 个答案:

答案 0 :(得分:1)

您已经为Teacher定义了一个构造函数,这意味着它是唯一存在的构造函数。为了在Course中使用默认的无参数构造函数,必须首先实现一个。

Teacher();添加到Teacher.h,将Teacher::Teacher(){}添加到Teacher.cpp将解决您的问题,但是Teacher中的Course需要手动初始化。

编辑: Badr El Hiouel指出,如果您不希望在默认构造函数中执行任何代码,并且使用的是C ++ 11,则只需将Teacher() = default添加到Teacher.h中,就可以省略它完全来自.cpp。