5

以前に正常にコンパイルされていたVC++コードに、次のような関数X()を追加しました。

In the file BaseCollection.h
class Base
{
// code
virtual HRESULT X();
//code
};


IN the file DerivedCollection.h
class Derived:public Base
{
    HRESULT X();

}

In the file DerivedCollection.cpp
HRESULT Derived::X
{
// definition of Derived here. 
}

ヘッダーファイルも.cppファイルに適切にインクルードされています。しかし、それでも、リンクエラーが発生する理由がわかりません。

エラーLNK2001:未解決の外部シンボル "public:virtual long __thiscall Base :: X()"(?X @ Base @@ UAEJI @ Z)

私はこのバグを修正するために本当に一生懸命努力しています。誰かがこの問題を解決するのを手伝ってくれませんか。よろしくお願いします。

4

2 に答える 2

7

で実装X()しましたBaseか?あなたはそれをするか、それを純粋な仮想にする必要があります:

class Base
{
// code
virtual HRESULT X() = 0; //pure virtual. Base doesn't need to implement it.
//code
};

また、inの定義X()Derived間違っているように見えます。あなたはおそらくこのようなものが必要です:

HRESULT Derived::X()
{
// definition of Derived here. 
}
于 2012-04-23T11:07:08.120 に答える
2

関数を定義することはありませんX

HRESULT Base::X()
{
// definition of X 
}

Derived::X()それもであるため、の定義も必要になりますvirtual

于 2012-04-23T11:07:27.277 に答える