struct als Zeiger an Funktion übergeben?

lordfritte

Erfahrenes Mitglied
Hallo ich bin gerade C++ am lernen und bastel gerade mit struct's, jetzt möchte ich ein struct an eine Funktion übergeben und die Elemente in der Funktion ausgeben, das geht auch ohne Probleme.
Aber wenn ich jetzt versuche den struct als Zeiger zu übergeben, bekomme ich einige Fehlermeldungen:
Code:
struct.cpp: In function `int main()':
struct.cpp:37: error: cannot convert `Person' to `Person*' for argument `1' to `void ausgabePerson(Person*)'
struct.cpp:38: error: cannot convert `Person' to `Person*' for argument `1' to `void ausgabePerson(Person*)'

und hier der Code:
PHP:
#include <iostream>
#include <string>
using namespace std;

struct Person{
	string name;
	string vorname;
	int alter;
	bool istMann;
};

void ausgabePerson(Person *person){
	cout << "Name: " << (*person).name << endl;
	cout << "Vorname: " << (*person).vorname << endl;
	cout << "Alter: " << (*person).alter << endl;
	if((*person).istMann){
		cout << "Geschlecht: Maennlich\n" << endl;
	}else{
		cout << "Geschlecht: Weiblich\n" << endl;
	}
}

int main(){

    Person tobias;
    tobias.name = "Herweg";
    tobias.vorname = "Tobias";
    tobias.alter = 21;
    tobias.istMann = true;
    
    Person lisa;
    lisa.name = "Müller";
    lisa.vorname = "Lisa";
    lisa.alter = 25;
    lisa.istMann = false;
    
    ausgabePerson(tobias);
	ausgabePerson(lisa);


    system("PAUSE");
    return 0;
}

EDIT: Ich hab den Fehler gefunden, ich habe & vergessen.
 
Zuletzt bearbeitet:
Hallo ich bin gerade C++ am lernen und bastel gerade mit struct's, jetzt möchte ich ein struct an eine Funktion übergeben und die Elemente in der Funktion ausgeben, das geht auch ohne Probleme.
Aber wenn ich jetzt versuche den struct als Zeiger zu übergeben, bekomme ich einige Fehlermeldungen:
Nein, du versuchst den struct an einen Zeiger auf struct zu übergeben. Das geht natürlich nicht. Du mußt schon einen gültigen Zeiger übergeben:
C:
ausgabePerson(&tobias);
In C++ würde man das aber eigentlich mit Referenzen machen:
C++:
void ausgabe(const Person& p) {
  cout << p.name << endl;
}

Person tobias;
...
ausgabe(tobias);
Gruß
 
Danke, und warum ist es besser das ganze als const zu deklarieren?
Weil die Funktion dann auch für konstante Objekte und temporäre Objekte aufgerufen werden kann.

Bsp:
C++:
using namespace std;

void foo(string& s) {
  cout << s << endl;
}
...

string s1 = "abc";
const string s2 = "xyz";

foo(s1); // ist OK
foo(s2); // Fehler
foo("asdfasd"); // Fehler, temporäres string Objekt kann nicht als Referenz übergeben werden
Gruß
 
Zuletzt bearbeitet:
Zurück