Entschuldigung, wenn das eine wiederholte Frage ist, aber ich habe ein paar Stunden lang gesucht, und ich bekomme widersprüchliche Antworten ... und was noch schlimmer ist, keiner von ihnen sind am Arbeiten.Eclipse/GCC: Unbekannter Verweis auf externe Variable
Es ist eine einfache Sache. Ich habe viele Quelldateien, und ich habe einige gemeinsame Parameter, die ich in einer einzigen Datei sein möchte, sagen "Parameter.h". Ich möchte diese Parameter (einmal) zur Laufzeit setzen, indem Sie sie als Argumente an das Programm übergeben.
PS: Ich weiß, dass es ein besserer Weg ist, alles als Argumente für Funktionen zu übergeben, aber es ist ein klobiges Stück Code und ich muss bald ein Ergebnis bekommen, ohne zu viele Änderungen vorzunehmen.
Hier ist ein minimales Arbeitsbeispiel:
Parameters.h
#ifndef PARAMETERS_H_
#define PARAMETERS_H_
extern int Alpha;
#endif
main.cpp
#include <iostream>
#include "Parameters.h"
int main(int argc, char * argv[])
{
const int Alpha = 12.0;
}
Functions.cpp
#include "Parameters.h"
double Foo(const double& x)
{
return Alpha*x;
}
Als ich mit
gcc main.cpp Functions.cpp
kompilieren bekomme ich die Fehlermeldung "Functions.cpp :(text + 0xa.): Undefined reference to` Alpha '".
Vielen Dank! Das Problem war, wie Sie sagen, dass ich Alpha im Dateibereich in main.cpp nicht definiert habe. Jetzt fühle ich mich wie ein Idiot :-) Nochmals vielen Dank. – MGA
ist es notwendig, Alpha als 'extern' zu definieren, wenn man bedenkt, dass die Deklaration in einer Header-Datei ist? – ldgorman
@ldgorman: Wenn Sie 'extern' nicht verwenden, wäre es eine Definition, nicht nur eine Deklaration. Wenn Sie diesen Header dann in mehr als eine Quelldatei einfügen, erhalten Sie Linker-Fehler über mehrere Definitionen desselben Symbols. –