语法错误“没有命名类型”

时间:2013-09-07 05:31:05

标签: c++ syntax compiler-errors

为什么我的以下代码在编译时产生以下代码:错误:'Evolve'类中的'Individual'没有命名类型。

#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;
    }
}

我已经阅读了一些关于错误的其他帖子,而且一切都是关于声明函数的顺序,但我不确定这是否是我问题的原因。

2 个答案:

答案 0 :(得分: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并且它泄漏了内存。

答案 1 :(得分:0)

一般语法是:

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

Individual*  Evolve    :: run          (int generations)

修正您的Evolve定义