2012-01-05 23 views
1

私は誰かが私は次のようなエラーになっています理由を把握するために正しい方向に私を指すことができます期待しています:取得未定義の参照エラー

$~/display/triangleDisplayable.cc:4: undefined reference to `Displayable::Displayable()' 

私は抽象クラスDisplayableにしようとしているのとクラスを持ってtriangleDisplayableそのメソッドを実装しています。私が持っている2つのヘッダファイルは、 "Displayable.h" です:

class Displayable { 

    public: 
     Displayable(); 

     virtual int getSizeOfArrays() = 0; 
     void display(int size); 

    private: 
     virtual void init() = 0; 
     virtual int getSizeOfPointsArray() = 0; 
     virtual int getSizeOfNormalsArray() = 0; 

    }; 

と "triangleDisplayable.h"

#include "Displayable.h" 

    class triangleDisplayable : public Displayable 
    { 

    public: 
     triangleDisplayable(); 
     int getSizeOfArrays(); 

    private: 
     void init(); 
     int getSizeOfPointsArray(); 
     int getSizeOfNormalsArray(); 

    }; 

そして私は "Displayable.cc"

#include <iostream> 
    #include "Displayable.h" 

    Displayable::Displayable() { 
     std::cout << "testing Displayable constructor" << std::endl; 
    } 

    void Displayable:display(int size) { 
    } 

    int main() { 
     return 0; 
    } 

を持っており、 "triangleDisplayable.cc"

#include <iostream> 
    #include "triangleDisplayable.h" 

    triangleDisplayable::triangleDisplayable() : Displayable() { 
    } 

    int triangleDisplayable::getSizeOfArrays() { 
     return 0; 
    } 

    void triangleDisplayable::init() { 
    } 

    int triangleDisplayable::getSizeOfPointsArray() { 
     return 0; 
    } 

    int triangleDisplayable::getSizeOfNormalsArray() { 
     return 0; 
    } 

    int main() { 
     return 0; 
    } 

私は、C++で抽象化を行う方法を学ぶために様々なチュートリアルを続けようとしてきましたが、実際にこれに役立つ解決策を見つけることはできませんでした。私は私の#includeのすべてが正しいと信じています。私はこれを読むのはよくある問題です。エラーメッセージは、問題が、私は: Displayable()なしでコンパイルしようとしたライン

triangleDisplayable::triangleDisplayable() : Displayable() { 
    } 

であることを示しているようだが、私は同じエラーを取得します。ヘッダーファイルに私の構文に問題がありますか?

+1

Displayable.ccをコンパイルしてオブジェクトファイルにリンクしましたか? – PlasmaHH

+0

Displayable()の代わりにコンストラクタを定義してみてください。ディスプレイ可能(){}; Displayable.hファイルに保存します。これはすべてのサブクラスコンストラクタで呼び出されます – Pramod

+1

私は2つのソースファイルを一緒にリンクしていませんでした。助けてくれてありがとう! –

答えて

6

いいえ、エラーはツール呼び出しにあります。 2つのソースファイルをリンクする必要があります(例:g++ -o foo a.cc b.cc)。 2つの異なる機能を持つことはできないため、mainの機能のうち1つを削除してください。

+0

ありがとう、それは素晴らしい仕事!私は2つの主な機能をキャッチしていないとは信じられません。 –