嘿伙计们我正在尝试用C ++实现反向传播算法,我尝试过Xcode和C ++ Eclipse,但是我遇到了同样的错误而且我不知道如何修复它,我试过在这里搜索但是没有提出的解决方案,这是以下错误消息和我的代码。
错误讯息:
make all
Building file: ../src/NeuralNet.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/NeuralNet.d" -MT"src/NeuralNet.d" -o"src/NeuralNet.o" "../src/NeuralNet.cpp"
Finished building: ../src/NeuralNet.cpp
Building target: NeuralNet
Invoking: MacOS X C++ Linker
g++ -o "NeuralNet" ./src/Net.o ./src/NeuralNet.o
duplicate symbol __ZN3NetC2ERKNSt3__16vectorIjNS0_9allocatorIjEEEE in:
./src/Net.o
./src/NeuralNet.o
duplicate symbol __ZN3NetC1ERKNSt3__16vectorIjNS0_9allocatorIjEEEE in:
./src/Net.o
./src/NeuralNet.o
ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [NeuralNet] Error 1
这是我的代码:
NeuralNet.cpp
#include <iostream>
#include <vector>
#include "Net.cpp"
using namespace std;
int main() {
vector<unsigned> topology;
topology.push_back(10);
Net net(topology);
return 0;
}
Net.h
#ifndef NET_H_
#define NET_H_
#include <vector>
using namespace std;
class Net {
public:
Net(const vector<unsigned>& topology);
};
#endif
Net.cpp
#include "Net.h"
Net::Net(const vector<unsigned>& topology) {
// TODO Auto-generated constructor stub
}
答案 0 :(得分:0)
您的IDE正在尝试将两个.cpp
文件编译为单独的编译单元,因为通常这些文件包含单独的编译单元。
但是您在Net.cpp
中包含NeuralNet.cpp
,因此其中的代码(即Net::Net
的实现)是以Net.cpp
为单位编译的,以及单位NeuralNet.cpp
。
编译两个编译单元后,调用链接器将它们链接在一起。它注意到Net::Net
出现两次并且不知道选择哪个,因此错误。
您永远不应该#include
.cpp
个文件。将#include "Net.cpp"
替换为#include "Net.h"
。您始终包含类的标头(.h
),而不是源(.cpp
)。