Ich habe eine Menge zu lesen bei der Weitergabe eines Strukturelements an eine Funktion. Aber wenn jemand klären könnte, wo ich falsch liege, würde ich es begrüßen. Ich sage voraus, das ist mehr ein Kompilierreihenfolge/Definitionsfehler als alles andere, obwohl es auch Syntaxfehler geben kann.C++ Struct-Werte von Funktion durch Referenz ändern (möglicherweise kompilieren Bestellungsproblem)
Wie ich es verstehe, ich bin in der Lage, die Struktur Mitglieder Daten zu ändern, und vermeiden Sie kopieren durch Übergabe als Referenz (in diesem Fall kein Zeiger). Diese Methode ermöglicht es mir auch, die punktierte Schreibweise für den Zugriff auf einzelne Mitglieder innerhalb der Funktion beizubehalten.
Main.cpp:
// include headers
struct foo{
int a;
int b;
}foo_data;
int main(){
foo_data.a = 1; // assign some values to the member in standard format.
foo_data.b = 2;
function(foo_data);
// should this be &foo_data, am I passing by value here as it is
// or is the declaration taking care of that?
}
functions.h:
void function(foo &) // function declaration reference of type foo
functions.cpp:
void function(foo &foo_data) // function definition reference of type foo
{
foo_data.a; // should == 1
foo_data.b; // should == 2
}
Die Fehler typischerweise undeclared Identifikatoren beziehen, foo_data ist. Muss ich sagen, die Deklaration in functions.h ich gebe es eine Struktur, oder in der Tat eine int (Referenz?)
Vielen Dank!
Hallo, es war in der Tat ein Design-Problem, das Verschieben der Struktur in die .h-Datei und das Umordnen beinhaltet, es zu kompilieren. Ich habe jetzt einen Link-Fehler in Bezug auf die Struktur bereits in main.obj - Nach der Suche habe ich festgestellt, dass dies auf mehrere CPP-Dateien beziehen kann nicht die gleiche Instanz verwenden. Wenn ich "statische Struktur" in meinen .h-Arbeiten zuweise, kann ich diese Struktur global machen? "extern" verursacht ähnliche Fehler und ist dies sogar die beste Vorgehensweise? Vielen Dank! –
@ChrisJones: Wenn Sie das gleiche globale Objekt über verschiedene Dateien teilen müssen, dann müssen Sie 'extern' verwenden, ich sehe nicht, wo Sie eine globale obwohl verwenden. –
Hallo, wenn meine Header-Datei in ENTWEDER main.cpp, OR functions.cpp enthalten ist, dann kompiliert und verbindet es. Wenn es in beiden Dateien enthalten ist, bekomme ich den folgenden Link Fehler: functions.obj: Fehler LNK2005: "struct Foo foo_data" (? Foo_data @@ 3UFoo @@ A) bereits in main.obj definiert - ich schließe meine ein. h unmittelbar nach dem Vorkompilieren beinhaltet. –