[C++] Vektor bzw. Zeiger darauf zurückgeben?

i_hasser

Grand Admiral Special
Mitglied seit
06.06.2002
Beiträge
18.964
Renomée
85
Standort
IO 0x60
Hi

Will eine Funktion die einen Zeiger auf einen kompletten Vektor zurückgibt (also nicht nur der Iterator, das ist mir zu unsauber).

So würde ich mir den Syntax vorstellen, leider stellt sich gcc die Sache anscheinend etwas anders vor :(:

Code:
vector<std::string> *fkt();

Ich bin im Netz über die Möglichkeit das mit dem Iterator zu machen gestollpert, aber wie gesagt, das ist (mir) zu unsauber.
 
Hat sich erledigt, hatte nur das std:: vergessen.

Code:
std::vector<std::string> *fkt()

funktioniert problemlos.
 
Hallo i_hasser,

habe auch das Problem das ich ein Zeiger auf ein Vector zurückgeben will.
nur meckert der immer bei mir rum (beim return):

return &Liste;

die Fuktion Rückgabe sieht so aus:

vector<struct> *fkt(const vector<struct>& Liste ...);

(using namespace std; ist gesetzt.)

ich glaube ich mach beim Return nen Fehler, ich komm einfach mit der Syntax noch nicht so richtig zurecht.

Würde mich sehr freuen wenn mir einer mal sein return zeigen könnte.(besser noch nen kleines Beispiel ;D )
 
So wie es dasteht, gibst du aber einen Zeiger auf ein Element des Vektors zurück, und nicht einen Zeiger auf den gesamten Vektor.

Das sähe dann so aus:

return &Liste;

Allerdings... was soll "struct" sein? Eigentlich müsste das eines der wenigen reservierten Schlüsselwörter sein die du nicht nehmen kannst.
 
Zuletzt bearbeitet:
soo,

also struct war nicht wörtlich gemeint (eine Struktur von C++)

so jetzt zum Problem: ich hab also ein dynamischen Vector und als Typ eine Struktur angegeben also damit ich z.B. soetwas schreiben kann:

cout<<v1.name;

wenn ich nen Zeiger darauf packe geht das ja auch jetzt ... also kann ich die Daten im Vector ändern ..... nur wenn ich jetzt den Vector erweitern will (mit push_back) findet er den Zeiger nicht mehr ... wieso ???

es muss doch eine Möglichkeit geben sich eine Stelle im Vector zu merken auch wenn er dynamisch ist.
 
Zuletzt bearbeitet:
Schreib mal Code und Fehlermeldung. Auf irgendwelche Sachen von Zeigern musst du per -> zugreifen oder vorher dereferenzieren, also zB. so:

Code:
clas A
{
  public:
  int abc();
  int x;
}

int main()
{
  A a;
  
  a.abc();
  a.x;

  A* p=&a;
  p->abc();
  p->x;

  (*p).abc();
  (*p).x;

  return 0;
}
 
Code:
struct User
{
	string name1; 
	string name2; 
};

int main()
{	
	vector<User> Liste;
	User admin={"Name1","Name2"};
	Liste.push_back(admin);

	User* p_me;
	p_me=&Liste[0];
	cout<<p_me->name1;

	Liste[0].name1="NeuName1";
	cout<<p_me->name1; // das geht ja auch noch

	User user2={"Name3","Name4"};
	Liste.push_back(user2);

	cout<<p_me->name1; // das jetzt nicht mehr
}
 
Zuletzt bearbeitet:
Du verwechselst da ein paar Sachen. Vektoren sind keine Arrays. Vektoren sind eine Klasse wie jede andere auch (nur mit Templates aufgepeppt), die den operator[] enthält, mit dem Zugriffe ala a[123] möglich werden.

Code:
User* p_me;
p_me=Liste[0];

Da fehlt ein &, denn der opterator[] von deinem Vektor gibt den Typ User zurück, nicht User*. Nimm vorsichtshalber Klammer, also "p_me=&(Liste[0]);" dann wird auf den ersten Blick deutlich, was gemeint ist. Ich weis net was für einen Compiler du nimmst, aber anscheinend hat der das schon automatisch gemacht, weil es sonst einen Fehler geben müsste.

Was du willst, kannst du am besten über "vector<User*>" realisieren, denn da kommt es nur auf den Wert der Elemente im Vektor an, nicht auf deren Position. Das sähe dann ungefähr so aus:

Code:
        vector<User*> Liste;
	User* admin=new User{"Name1","Name2"}; // musst gucken ob das so geht, ansonstne schreib einen passenden Konstruktor
	Liste.push_back(admin);

	User* p_me;
	p_me=Liste[0];
	cout<<p_me->name1;

	Liste[0]->name1="NeuName1";
	cout<<p_me->name1; 

	User* user2=new User{"Name3","Name4"};
	Liste.push_back(user2);

	cout<<p_me->name1; // das geht dann auch noch
 
Ahh jaa es funkst,

jeah na endlich ... Danke ...

PS. das & hatte ich nur vergessen abzuschreiben ;)
 
Zurück
Oben Unten