对 C++ 错误的未定义引用

undefined reference to c++ error

嗨,伙计们,我需要你的帮助! 当我编译 运行 时错误是:

/tmp/ccSOgpjn.o: 在函数 Collection::evaluate()': fitnessTest.cpp:(.text._ZN10Collection8evaluateEv[_ZN10Collection8evaluateEv]+0x45): undefined reference tofitnessFunction::doEvaluation(std::__cxx11::basic_string, std::allocator >)' /tmp/ccSOgpjn.o: 在函数 Collection::writeIndividual(char**, int)': fitnessTest.cpp:(.text._ZN10Collection15writeIndividualEPPci[_ZN10Collection15writeIndividualEPPci]+0x3a): undefined reference toreadIndividual::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;
}

我又尝试了几个类似我的问题,但没有找到我已经解决问题的答案。以上代码全部在一页中。

您在 fitnessFunction class 中的 doEvaluation(string ) 函数没有实现。

你有两个选择: - 通过在末尾附加 =0 使其成为纯虚拟的或 - 创建虚拟实现

我建议将其设为纯虚拟,以便编译器强制您在派生的 classes 中创建实现。