こんにちは、私はあなたの助けが必要です! 私は実行時エラーがあるコンパイル:未定義の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ページにあります。
[mcve]を作成してください。 – nwp
これはランタイムエラーではありません。それはリンカのエラーですあなたは 'fitnessFunction :: doEvaluation'と' readIndividual :: read'の両方が*純粋な仮想*であるように思えます。 – WhozCraig
は、 'doEvaluation'を純粋な仮想として定義し、問題を理解します。 – Asu