0

私は次のようなクラスを持っています:

Base.h

class Base {
    public:
        Base();

        virtual int getInfo(int i);

    protected:
        int GetDetail (int iVal);

}

inline int Base::getInfo(int i){

     int output = GetDetail(i);
     return output;
};

Ib Base.cpp には、GetDetail が定義されています。

int Base::GetDetail(int i){
int output;
// do work to output
return output;
}

独自の実装 getInfo() から GetDetail を呼び出す派生クラスがいくつかあります。

Base.h の仮想関数定義から getInfo() の呼び出しを削除すると、派生クラス独自の実装でコードがコンパイルされます。

インライン化された仮想関数から GetDetail を呼び出す仮想関数でコンパイルすると、リンクは次のように失敗します。

GetDetail への参照が定義されていません。

何か案は?

4

2 に答える 2

4
  1. 不足しているセミコロンを後に追加しますclass Base {...};
  2. Base.oを実行可能ファイルにリンクしていることを確認してください。

参考までに、g ++ 4.4.3を使用して(セミコロンを追加して)サンプルを正常にコンパイル/リンクできます。

于 2011-03-17T11:33:02.843 に答える
2

inline前の指定子を削除してint Base::getInfo(int i)試してください(:

于 2011-03-17T11:28:24.927 に答える