C++ C++;-重新定义/先前定义的错误

C++ C++;-重新定义/先前定义的错误,c++,object,C++,Object,为什么我会出现这个错误?我只是在做一个类对象。我错过了什么? 这是因为空体方法和构造函数吗?我不确定 我正在使用的教程如下所示: 代码: 获取此错误: ERROR (0.39 seconds): e:/something/ProgrammingExt/0a_Testing/cpp/neural_network/neural-net- tutorial.cpp:20:52: error: return type specification for constructor invalid vo

为什么我会出现这个错误?我只是在做一个类对象。我错过了什么?

这是因为空体方法和构造函数吗?我不确定

我正在使用的教程如下所示:

代码:

获取此错误:

ERROR (0.39 seconds): e:/something/ProgrammingExt/0a_Testing/cpp/neural_network/neural-net-

tutorial.cpp:20:52: error: return type specification for constructor invalid
 void Net::Net(const std::vector<unsigned> &topology)
                                                    ^
e:/something/ProgrammingExt/0a_Testing/cpp/neural_network/neural-net-tutorial.cpp:20:6: error: redefinition of ’Net::Net(const std::vector<unsigned int>&)’
 void Net::Net(const std::vector<unsigned> &topology)
      ^~~
e:/something/0a_Testing/cpp/neural_network/neural-net-tutorial.cpp:11:3: note: ’Net::Net(const std::vector<unsigned int>&)’ previously defined here
   Net(const std::vector<unsigned> &topology) {};
   ^~~
错误(0.39秒):e:/something/ProgrammingExt/0a\u Testing/cpp/neural\u network/neural network-
tutorial.cpp:20:52:错误:构造函数的返回类型规范无效
void Net::Net(const std::vector&topology)
^
e:/something/ProgrammingExt/0a_Testing/cpp/neural_network/neural nettutorial.cpp:20:6:error:net(const std::vector&)的重新定义
void Net::Net(const std::vector&topology)
^~~
e:/something/0a_Testing/cpp/neural_network/neural nettutorial.cpp:11:3:注意:前面定义的“net::net(const std::vector&)”
Net(const std::vector&topology){};
^~~

C++重载不能基于返回类型。所以有两个函数具有完全相同的参数,它们被视为相同的函数:

Net(const std::vector<unsigned> &topology) {};
Net(const std::vector&topology){};

void Net::Net(const std::vector&topology)
{
unsigned numLayers=topology.size();
对于(无符号layerNum=0;layerNum对于(unsigned neuronNum=0;neuronNum),错误消息会告诉您获取它们的原因

这是第二个错误。
Net
的构造函数有两个定义,其中包含一个
const std::vector&
参数。重复的定义在第20行,与触发先前关于
void
的错误的那一行相同。原始的定义在第11行,您在该行中定义了一个空的构造函数。有一个此定义后的无关分号,这表明可能有人打算在某个时候将定义转换为声明。这一点现在是。(错误消息中的
6
3
是指示行中的位置。编译器决定在构造函数名称的开头标记错误。)

因为您显然不希望这个构造函数有一个空的主体,所以将第11行的定义从

   Net(const std::vector<unsigned> &topology) {};
Net(const std::vector&topology){};
通过删除函数体来删除声明:

   Net(const std::vector<unsigned> &topology);
Net(const std::vector&topology);

这是因为(1)您有两个不同的构造函数定义
Net::Net(const std::vector&)
和(2)第二个定义中的构造函数签名无效(它具有返回类型void,但不应具有返回类型);另一个问题是,为构造函数提供了两个主体。您对构造函数有两个不同的定义
Net::Net()
——因此出现了重新定义错误。第二个(在类定义之后)返回类型为
void
-构造函数不允许有任何返回类型。是的,这有效了,感谢您的解释!第二个错误是真正的问题,我添加void只是为了看看它是否解决了任何问题,因为我假设我的对象应该有一个返回类型。
void Net::Net(const std::vector<unsigned> &topology)
{
  unsigned numLayers = topology.size();
  for (unsigned layerNum = 0; layerNum < numLayers; ++layerNum){
    m_layers.push_back(Layer());

    for (unsigned neuronNum = 0; neuronNum <= topology[layerNum]; ++neuronNum){
      m_layers.back().push_back(Neuron());
      std::cout << "Made a neuron!" << std::endl;
    }
  }
}
ERROR (0.39 seconds): [path]/neural-net-tutorial.cpp:20:52: error: return type specification for constructor invalid
 void Net::Net(const std::vector<unsigned> &topology)
                                                    ^
[path]/neural-net-tutorial.cpp:20:6: error: redefinition of ’Net::Net(const std::vector<unsigned int>&)’
 void Net::Net(const std::vector<unsigned> &topology)
      ^~~
[path]/neural-net-tutorial.cpp:11:3: note: ’Net::Net(const std::vector<unsigned int>&)’ previously defined here
   Net(const std::vector<unsigned> &topology) {};
   ^~~
   Net(const std::vector<unsigned> &topology) {};
   Net(const std::vector<unsigned> &topology);