Я пытаюсь совместно использовать ту же переменную между двумя .cpp файлами, они включают тот же.h файл.
Но я получаю соединение ошибок, говоря мне, что у меня есть повторные определения. Который я нахожу неловкими, так как я использую, включают защиту
//main.cpp
#include <cstdio>
#include "shared.h"
int main(){
shared_int = 5;
printVal();
return 0;
}
//shared.h
#ifndef INCLUDE_GUARD_H
#define INCLUDE_GUARD_H
#include <cstdio>
#include <cstdlib>
int shared_int;
int printVal();
#endif
//shared.cpp
#include <cstdio>
#include "shared.h"
int printVal(){
fprintf(stderr,"a: %d\n",shared_int);
return 0;
}
Я аккомпанирую как
g++ shared.cpp -c;g++ main.cpp shared.o
shared.o:(.bss+0x0): multiple definition of `shared_int'
/tmp/cci8w8Am.o:(.bss+0x0): first defined here
collect2: ld returned 1 exit status
спасибо
Обновление: 'экстерн' все еще не работает, но теперь я получаю неопределенную ссылку, Это обновленные файлы
//shared.h
#ifndef INCLUDE_GUARD_H
#define INCLUDE_GUARD_H
#include <cstdio>
#include <cstdlib>
//extern "C" int shared_int;//i've tried both
extern int shared_int;
int printVal();
#endif
//shared.cpp
#include <cstdio>
#include "shared.h"
int printVal(){
fprintf(stderr,"a: %d\n",shared_int);
return 0;
}
//main.cpp
#include <cstdio>
#include "shared.h"
int main(){
int shared_int = 5;
printVal();
return 0;
}
Это - то, как я компилирую
g++ main.cpp shared.o
shared.o: In function `printVal()':
shared.cpp:(.text+0x6): undefined reference to `shared_int'
collect2: ld returned 1 exit status