2016-10-29 29 views
-3

こんにちは、私はあなたの助けが必要です! 私は実行時エラーがあるコンパイル:未定義のC++エラーへの参照

/tmp/ccSOgpjn.o:機能Collection::evaluate()': fitnessTest.cpp:(.text._ZN10Collection8evaluateEv[_ZN10Collection8evaluateEv]+0x45): undefined reference to fitnessFunctionで:: doEvaluation(STD :: __ cxx11 ::のbasic_string、STD ::アロケータ>「) /tmp/ccSOgpjn.o :機能中Collection::writeIndividual(char**, int)': fitnessTest.cpp:(.text._ZN10Collection15writeIndividualEPPci[_ZN10Collection15writeIndividualEPPci]+0x3a): undefined reference to readIndividual :: read [abi:cxx11](char **、int) ' collect2:エラー:ldが1終了ステータスを返しました

なぜ理解できませんか?

私のコードは次のとおりです。


class fitnessFunction 
{ 
public: 
    virtual int doEvaluation(string x); 

}; 

class OneMax: public fitnessFunction 
{ 
public: 
    virtual int doEvaluation(string x) { 
     int count = 0; 
     for (int i = 0; i < x.size(); i++) 
      if (x[i] == '1') count = count + 1; 
      return count; 
    } 
}; 

class readIndividual 
    { 
     public: 
     string read(char * argv[], int i); 

     }; 

    class OneMaxIndividual: public readIndividual 
{ 
    public: 
    virtual string read(char * argv[], int i) { 
     string inputFile = argv[i+1]; 
     ifstream input(inputFile.c_str()); 
     string x; 
     input >> x; 
     input.close(); 
     return x; 
    } 
    }; 

class Collection 
    { 
    public: 
    fitnessFunction* m_function; 
    readIndividual* m_individual; 
    string individual; 
public: 
    Collection(){} 
    void set_function(fitnessFunction* s){ 
     m_function = s; 
    } 
    void set_individual(readIndividual* s){ 
     m_individual = s; 
    } 
    int evaluate() { 
     m_function->doEvaluation(individual); 
    } 
    void writeIndividual(char* argv[], int i) { 

     individual = m_individual->read(argv,i); 
    } 

    }; 

int main(int argc, char* argv[]) 
    { 

    int result = 0; 
    string outputFile = "fitness.out"; 
    ofstream output(outputFile.c_str()); 

    OneMax fitnessFunction; 
    OneMaxIndividual individualObj; 

    Collection collection; 
    collection.set_function(&fitnessFunction); 
    collection.set_individual(&individualObj); 

    for(int i = 0; i < argc/2; i++){ 
    //lettura individo 
    collection.writeIndividual(argv,i); 
    result = collection.evaluate(); 
    output << result << endl; 
    } 

    for(int i = argc/2; i < argc-1; i++){ 


    collection.writeIndividual(argv,i); 
    result = collection.evaluate(); 
    output << result << endl; 

    } 

    output.close(); 

    return 0; 
} 

私が試しました私のようないくつかの質問がありますが、私が問題を解決したという答えは見つかりませんでした。上記のコードはすべて1ページにあります。

+1

[mcve]を作成してください。 – nwp

+3

これはランタイムエラーではありません。それはリンカのエラーですあなたは 'fitnessFunction :: doEvaluation'と' readIndividual :: read'の両方が*純粋な仮想*であるように思えます。 – WhozCraig

+0

は、 'doEvaluation'を純粋な仮想として定義し、問題を理解します。 – Asu

答えて

0

fitnessFunctionクラスのdoEvaluation(文字列)関数には実装がありません。

あなたは2つのオプションがあります。 - エンドまたは で= 0を付加することによって、それは純粋仮想作る - ダミーの実装を作成

を、私はあなたが実装を作成するために、コンパイラによって強制されるように、それは純粋仮想にするsugest派生クラスで。

+0

これは素晴らしい動作です! tnks !!!! – Giuseppe

関連する問題