Как решить Duplicate Symbol Error?

Я собираю 2 файла C ++ вместе. 4, если вы включите заголовочные файлы. Проблема в том, что я продолжаю получать ошибки «Duplicate Symbol», когда компоновщик пытается связать файлы вместе.

Вот мои файлы.


main.h

int test2();

main.cc

#include "main.h"#include "test.h"
int test2(int test) {
return 0;
}

int main() {

test2(test());
return 0;
}

test.h

int hello = 10;
int test();

test.cc

#include <iostream>
#include "test.h"using namespace std;

int test() {
cout << hello << endl;
return 0;
}

Я думаю, что делаю что-то простое неправильно. Может кто-нибудь указать, что я делаю не так.
Вот как я собираю файлы.

c++ main.cc test.cc -o main

Вот ошибка, которую я получаю:

duplicate symbol _hello in:
/var/folders/nj/568_95bj4dg9v11l_mksv_2m0000gn/T/main-3becdd.o
/var/folders/nj/568_95bj4dg9v11l_mksv_2m0000gn/T/test-e84473.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

0

Решение

В заголовочном файле объявите переменную:

extern int hello;

В одном исходном файле определите переменную:

int hello = 10;

Не определяйте переменные в заголовках — это эквивалентно определению их в каждом исходном файле, который включает заголовок, и именно это вызывает ошибку компоновщика.

9

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

Вы можете просто определить привет как «статическую» (глобальную) переменную

static int hello = 10;

Более подробная информация упоминается в аналогичном вопросе:

Повторяющиеся символы при связывании

0

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