2017-07-12 31 views
0

Interfaceクラスを考えてみましょう:のVisual Studio 2010 - C++致命的なエラーLNK1120:1つの未解決の外部

someMethodは純粋仮想であると someMethod2が仮想 次に、2つの派生クラス Derived

class Derived : public Interface 
{ 
public: 
    Derived(){ cout << "derived constructor";} 

    ~Derived(){ cout << "derived destructor";} 

    virtual void someMethod() override { cout << "derived someMethod";} 
    virtual void someMethod2() { cout << "derived someMethod2";} 

}; 

ある

class Interface 
{ 
public: 

    virtual ~Interface(){} 

    virtual void someMethod() = 0; 
    virtual void someMethod2(){} 
}; 

DerivedB

class DerivedB : public Interface 
{ 
public: 
    DerivedB(){ cout << "derivedB constructor";} 

    ~DerivedB(){ cout << "derivedB destructor";} 

    virtual void someMethod() override { cout << "derivedB someMethod";} 
}; 

純粋仮想メソッドだけを実装しています。 mainで、私は次のことをやっている:

vector<Interface *> myVector(4); 


for(int i = 0; i < 4; i++){ 
    if(i%2 == 0){ 
     myVector[i] = new Derived(); 
    }else{ 
     myVector[i] = new DerivedB(); 
    } 
} 

私は、私は次のエラーを取得する構築しようとした際:

error LNK2019: unresolved external symbol "public: __thiscall DerivedB::DerivedB(void)" ([email protected]@[email protected]) referenced in function _main 
debug\Test.exe : fatal error LNK1120: 1 unresolved externals 

間違っていますか?

+1

、どこ 'DerivedB :: DerivedB'の実装?それを実装してエラーが消えてしまいます。 – RbMm

+0

私はすでに.cppに 'DerivedB'コンストラクタを実装しています。元の投稿を更新しました。 – paperox

答えて

0

また、あなたは宣言派生クラス、すなわちDerived::~Derived(void)Derived::someMethod(void)Derived::someMethod2(void)DerivedB::~DerivedB(void)DerivedB::someMethod(void)のための他の方法を実装する必要があります。

はこの記事を参照してください:What is the difference between a definition and a declaration?What is an undefined reference/unresolved external symbol error and how do I fix it?

+0

これらは実装されています。元の投稿を更新しました。 – paperox

+1

@paperoxあなたのエラーメッセージが消えなければならないように! – vasek

+0

すみません。 .oファイルを手動で削除する必要がありました。今それは動作します。 – paperox

関連する問題