Ich versuche, die gleiche Variable zwischen zwei .cpp-Dateien zu teilen, enthalten sie die gleiche .h-Datei.Probleme mit globalen Variablen zwischen Quelldateien geteilt (Ich verwende Include-Wachen)
Aber ich bekomme Verknüpfungsfehler, sag mir, dass ich mehrere Definitionen habe. Welche finde ich peinlich, da ich Wachen bin mit umfassen
//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;
}
I wie
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
dank comping bin
Update: Die 'extern' immer noch nicht funktioniert, aber jetzt bin erhalten einen nicht definierten Referenz Dies sind die aktualisierten Dateien
//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;
}
Dies ist, wie ich
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
Die Antwort bereits von Greg gegeben ist, aber sicher sein, den Unterschied zwischen einer Erklärung und einer Definition zu verstehen. Es ist ein wichtiger Unterschied, der Ihnen hilft, die Nachrichten des Compilers besser zu verstehen und die Gesamtsemantik des Codes zu verstehen. – Nick
Ihr aktualisierter Code fügt "extern" C "hinzu (was etwas ganz anderes ist als das, was ich in meiner Antwort vorgeschlagen habe) und führt überhaupt keine Definition ein. Versuchen Sie stattdessen, was ich in meiner Antwort vorgeschlagen habe. –
@greg Hewgill. Ich habe das auch versucht, den gleichen Linkfehler.Danke – monkeyking