struct macht probleme

Hallo,
ich habe ein Problem mit einem struct. Ich habe zwei Programme. Das erste enthält alle Anweisungen in einer Funktion. Das zweite hat die Anweisungen in einer extra Funktion ausgelagert. Irgendwie kann das Programm aber nicht richtig auf das struct zugreifen, wenn es von einer anderen Funktion gefüllt wurde. Hier sind jetzt die beiden Programme:
Code:
//1. Programm. Hier ist alles in einer Funktion und es funktioniert!
#include<iostream>

using namespace std;

struct egal
{
	int zahl;
	string text;
};

int main()
{
	egal fuellen;
	fuellen.zahl=5;
	fuellen.text="Hallo Welt";
	cout<<fuellen.zahl<<"\t"<<fuellen.text<<endl;
	cin>>fuellen.zahl;
	cin>>fuellen.text;
	cout<<fuellen.zahl<<"\t"<<fuellen.text<<endl;
	system("pause");
}
Code:
//2.Programm. Hier funktioniert die Ausgabe in der Funktion int main() nicht mehr richtig!
#include<iostream>

using namespace std;

struct egal
{
	int zahl;
	string text;
};

void struct_fuellen()
{
	egal fuellen;
	fuellen.zahl=5;
	fuellen.text="Hallo Welt";
	cout<<fuellen.zahl<<"\t"<<fuellen.text<<endl;
	cin>>fuellen.zahl;
	cin>>fuellen.text;
	cout<<fuellen.zahl<<"\t"<<fuellen.text<<endl;
}

int main()
{
	egal fuellen;
	struct_fuellen();
	cout<<fuellen.zahl<<"\t"<<fuellen.text<<endl;
	system("pause");
}

Hab überhaupt keine Idee wodran das liegen könnte. Müsste aber doch eigentlich gehen, oder?
bastionmancher
 
Hab überhaupt keine Idee wodran das liegen könnte. Müsste aber doch eigentlich gehen, oder?
Nein, müßte es nicht. Und wird auch nicht. Du legst dort innerhalb der Funktionen 2 verschiedene Variablen vom Typ "egal" mit dem gleichen Namen an. Diese sind sog. "automatische" Variablen die nur innerhalb des sie umgebenden Blocks zugreifbar sind und existieren. Der Compiler legt diese Variablen automatisch an und räumt sie auch automatisch wieder weg wenn der Block betreteten bzw. verlassen wird.

Das was du willst, könnte man so machen:
C++:
void struct_fuellen(egal& fuellen) {
  fuellen.zahl=5;
	fuellen.text="Hallo Welt";
	cout<<fuellen.zahl<<"\t"<<fuellen.text<<endl;
	cin>>fuellen.zahl;
	cin>>fuellen.text;
	cout<<fuellen.zahl<<"\t"<<fuellen.text<<endl;
}

int main() {
  egal xyz;

  struct_fuellen(xyz);
  cout<<xyz.zahl<<"\t"<< xyz.text<<endl;
  system("pause");
}
Das heißt, man muß die zu füllende Variable an die Funktion über einen Zeiger oder per Referenz (wie hier) übergeben.

Gruß
 
super!
Danke für deine schnelle Hilfe. Jetzt funktioniert alles problemlos. Das heißt also, ich hab zwei mal das struct angelegt und einmal ausgefüllt und int main hat auf ein völlig anderes struct zugegriffen, richtig?

bastionmancher
 

Neue Beiträge

Zurück