0

次のコードがコンパイル中に次のエラーを生成するのはなぜですか:

#ifndef EVOLVE_H
#define EVOLVE_H
#include <cstdlib>
#include <iostream>
#include <string>
#include "Operator.h"
#include "Individual.h"

using namespace std;

class Evolve
{
public:
    Evolve(int length, Operator** operators, int numOperators);

    Individual* bestIndividual;
    Individual* run(int generations);
    Operator operatorArray[];

private:
    int length; 
    int numOperators;   
};
#endif

そして、私のクラスファイルは

#include <cstdlib>
#include <iostream>
#include <string>
#include "Evolve.h"
#include "Operator.h"
#include "Individual.h"

using namespace std;

Evolve::Evolve(int length, Operator** operators, int numOperators)
{
    Individual* bestIndividual = new Individual(length);
}

Evolve::Individual* run(int generations)
{
    for(int i=0; i<generations; i++)
    {
        cout << "test counter = " << i << endl;
    }
}

エラーに関する他のいくつかの投稿を読みましたが、それはすべて関数を宣言する順序に関するものでしたが、それが私の問題の原因であるかどうかはわかりません.

4

2 に答える 2

3

メンバー関数の実装方法が正しくありません。

アップデート:

Evolve::Individual* run(int generations)

に:

Individual* Evolve::run(int generations)

また、メンバーを初期化するために、再度再定義する必要はありません。

Evolve::Evolve(int length, Operator** operators, int numOperators)
: bestIndividual(new Individual(length)
{
}

あなたのコンストラクタでは、

Individual* bestIndividual = new Individual(length);

ローカル ポインターを定義するbestIndividualと、メモリ リークが発生します。

于 2013-09-07T05:32:36.760 に答える
0

一般的な構文は次のとおりです。

return-type class-name :: function-name(arg list)

Individual*  Evolve    :: run          (int generations)

Evolve定義を修正する

于 2013-09-07T05:36:03.937 に答える