1

親クラス

class Test {
public:
    Test(){};
    virtual ~Test(){};
    void print() {  cout<<1<<endl;};
};

サブクラス .h 定義

class TestSub: public Test {
public:
    TestSub();
    virtual ~TestSub();
 };

サブクラス .cpp 実装

#include "TestSub.h"

TestSub::TestSub() {

}

TestSub::~TestSub() {
}

void TestSub::print(){
    cout<<2<<endl;
}

int main(){
    TestSub *t=new TestSub();
    t->print();
}

どうして:

..\src\TestSub.cpp:17:21: エラー: クラス 'TestSub' で宣言された 'void TestSub::print()' メンバー関数がありません

4

3 に答える 3

1

print() 関数は TestSub クラスで宣言されていません。

class TestSub: public Test {
public:
    TestSub();
    void print();        // add declaration.
    virtual ~TestSub();
 };

あなたもTest::print仮想化するつもりだったのですか?

class Test {
public:
    Test(){}
    virtual ~Test(){}
    virtual void print() {  std::cout << 1 << std::endl;} 
};
于 2012-12-27T06:27:38.123 に答える
1

2 つのエラーがあります。

  • まず、関数を次のように宣言する必要がありますTestSubvoid print();

  • 次に、実装の戻り値の型を指定する必要があります。C++ は などのデフォルトの戻り値の型を受け入れCないため、実装を次のように変換する必要があります。void TestSub::print() {...}

于 2012-12-27T06:16:23.440 に答える
0

戻り値の型を指定しない場合、C のデフォルトは関数の戻り値の型として int になります。クラス内の宣言の void 戻り値の型と一致しません。

于 2012-12-27T06:13:58.023 に答える