簡體   English   中英

cpp文件中的C ++繼承函數

[英]C++ inherited function in cpp file

Topic是一個基類,具有在Topic聲明的一種possibleEvaluationQuestions()的方法( possibleEvaluationQuestions()Topic possibleEvaluationQuestions() AlgebraTopicTopic的子類。 AlgebraTopic的cpp文件中,我聲明了該函數:

vector<EvaluationQuestion *> AlgebraTopic::possibleEvaluationQuestions()
{
    return vector<EvaluationQuestion *>();
}

但是在Xcode中得到警告“行外定義...”。它說'possibleEvaluationQuestions()'不是在AlgebraTopic聲明的,它不是,而是在超類Topic聲明的。做錯了嗎?

當您定義時:

vector<EvaluationQuestion *> AlgebraTopic::possibleEvaluationQuestions()

編譯器正在尋找相應的聲明:在C ++中,如果沒有聲明成員函數,則無法定義它。

基類函數的聲明是另一個不同函數的聲明:任何AlgebraTopic對象都存在。

您可以這樣說服自己:

struct X
{
    virtual void foo() { std::cout << "base\n"; }   
};

struct Y : X
{
    void foo() { std::cout << "derived\n"; }
};

int main(){

    Y y;
    y.foo();
    y.X::foo();
}

輸出:

派生

基礎

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM