C ++构造函数重载 - 为什么说我需要括号?

时间:2017-08-04 10:29:45

标签: c++ debugging constructor

以下是我的头文件的代码:

#ifndef NEURAL_NETWORK_H
#define NEURAL_NETWORK_H

#include <vector>

#include "genome.h"
#include "node.h"

class NeuralNetwork {
protected:
    std::vector<Node> m_nodes;

public:
    NeuralNetwork(std::vector<Node> nodes);
    NeuralNetwork(Genome genome);

    void update();
};

#endif

然而,当我尝试编译它时,它说:

neuralNetwork.h:15:23: error: expected ‘)’ before ‘genome’
  NeuralNetwork(Genome genome);

然而,没有不平衡的括号,我认为代码没有错,我假设这与构造函数重载有关,但在网上研究后,似乎没有任何特殊规则。 此外,当我用int替换Genome时

我正在使用C ++ 11。

1 个答案:

答案 0 :(得分:0)

你有一个循环依赖,你需要打破。通常使用前向声明

事实上,neuralNetwork.h头文件(如图所示)中没有任何内容实际需要 Genome的完整定义,这意味着您可以替换

#include "genome.h"

class Genome;

您仍需要源文件中的#include "genome.h",您可以在其中定义(实现)构造函数。