Xcode C++ ::体系结构x86_64的重复符号

Ahm*_*mad 11 c++ xcode clang xcode6

我是Xcode的新手,当我构建以下代码(MWE)时,我收到以下错误

ld:架构x86_64 clang的3个重复符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我有三个文件如下;

main.cpp中

#include "B.cpp"
int main() {
  square(5);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

B.cpp

#include "A.cpp"

void square(int n){
  display(n*n);
}
Run Code Online (Sandbox Code Playgroud)

A.cpp

#include <iostream>
using namespace std;

void display(int num){
  cout<<num;
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了在堆栈溢出时提到的不同方法,例如将"仅构建活动架构"更改为"是"以及其他一些但错误仍然存​​在.

dop*_*ime 19

问题是main.cpp包括B.cppA.cpp.在你的构建过程中,你也编制B.cppA.cpp和尝试链接B.oA.o非常久远main.o.

链接B.oA.o导致符号displaysquare多次定义.display定义3次并square定义2次.

你只需编译和构建main.cpp.不要建立A.cppB.cpp.

第二种方式是make A.cppand B.cppto A.hB.hand functions inline.因此,它们只会被编译一次.

路,不包括B.cppmain.cpp.只是把函数声明而不是包含.

//main.cpp

void square(int);

int main() {
  square(5);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

通常,函数声明放在头文件中.如果在多种情况下需要,请创建一个头文件.