Я новичок в Xcode, и когда я строю следующий код (MWE), я получаю следующую ошибку
ld: 3 повторяющихся символа для архитектуры x86_64
clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v для просмотра вызова)
У меня есть три файла следующим образом;
main.cpp
#include "B.cpp"int main() {
square(5);
return 0;
}
B.cpp
#include "A.cpp"
void square(int n){
display(n*n);
}
a.cpp
#include <iostream>
using namespace std;
void display(int num){
cout<<num;
}
Я пробовал разные методы, упомянутые при переполнении стека, такие как изменение «Build Active Architecture Only» на «Yes» и некоторые другие, но ошибка все еще сохраняется.
Проблема в том, что main.cpp
включил B.cpp
а также A.cpp
, В процессе сборки вы также компилируете B.cpp
а также A.cpp
и пытается связать B.o
а также A.o
вместе с main.o
,
соединение B.o
а также A.o
вызывает символы display
а также square
быть определенным несколько раз. display
определяется 3 раза и square
определено 2 раза.
Вы просто компилируете и собираете main.cpp
, Не строить A.cpp
а также B.cpp
,
второй путь это сделать A.cpp
а также B.cpp
в A.h
а также B.h
и функции inline
, Таким образом, они будут скомпилированы только один раз.
В третьих Кстати, не включайте B.cpp
в main.cpp
, Просто поместите объявление функции вместо включения.
//main.cpp
void square(int);
int main() {
square(5);
return 0;
}
Обычно объявления функций помещаются в заголовочные файлы. Если это требуется в нескольких случаях, создайте файл заголовка.