![](/img/trans.png)
[英]New C++ Template class Constructor that takes a type of itself as an argument
[英]Passing an class type as a constructor argument C++
當我偶然發現一個錯誤時,我正在嘗試學習 c++。 我有這個繼承自 class PERSON 的 class。
#include <iostream>
#include <string>
class PERSON
{
private:
std::string name;
bool sex;
public:
PERSON(std::string name, bool sex) : name(name) , sex(sex){};
//methods
};
class TEACHER: public PERSON
{
private:
std::string title;
public:
TEACHER(std::string name, bool sex, std::string title) : PERSON(name,sex), title(title){};
//methods
};
現在問題開始了,當我需要將此 class TEACHER 放在構造函數中以創建 class CLASSROOM 時,將它們作為 arguments 傳遞。
class CLASSROOM : public TEACHER
{
private:
std::string name;
TEACHER lecturer;
TEACHER s_teacher;
public:
CLASSROOM(std::string name, TEACHER lecturer , TEACHER s_teacher){};
//methods
};
當我編譯它時,它顯示“錯誤沒有匹配 function 以調用 'TEACHER::TEACHER()'”並且我不知道如何初始化 CLASSROOM 構造函數。 我嘗試了一些事情,比如初始化構造函數,就像我使用其他構造函數一樣,但出現了同樣的錯誤。
CLASSROOM 不是一種 TEACHER,所以我認為真的不想從TEACHER
class 派生CLASSROOM
class。
一旦上述更正,您可以編寫構造函數,如下所示:
class CLASSROOM
{
private:
std::string name;
TEACHER lecturer;
TEACHER s_teacher;
public:
CLASSROOM(std::string name, TEACHER lecturer , TEACHER s_teacher):
name(name),
lecturer(lecturer),
s_teacher(s_teacher) {};
//methods
};
你的問題在這里:
class CLASSROOM: public TEACHER
您告訴編譯器您的 CLASSROOM是TEACHER,錯誤消息僅表示您沒有 TEACHER 的所謂“默認構造函數”(只有一個以姓名、性別和標題作為參數的構造函數)。
當然,幾乎可以肯定,您不希望 CLASSROOM 繼承自 TEACHER。 一個教室里可能有一個或多個老師,但它不是老師。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.