Xcode C ++ :: Дублирующиеся символы для архитектуры x86_64

Я новичок в 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» и некоторые другие, но ошибка все еще сохраняется.

8

Решение

Проблема в том, что 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;
}

Обычно объявления функций помещаются в заголовочные файлы. Если это требуется в нескольких случаях, создайте файл заголовка.

15

Другие решения


По вопросам рекламы [email protected]