![]() |
[C++] Pointer-Problem: illegal indirection
Hallo zusammen,
mein C++-Compilier (VS2005 Prof.) meldet mir "illegal indirection" bei diesem Code:
Code:
Das MSDN sagt dazu folgendes:
void CKommunikation::StudentenInfo(void)
{ CStudent *studentenliste; studentenliste = pa.StudentenlisteSenden(); for (int i = 0; i < 8; i++) { cout << "Name: " << *studentenliste[i].NameSenden() << ", Matrikel-Nr.: " << *studentenliste[i].MatrikelNrSenden() << "\n"; } } Zitat:
StudentenlisteSenden sieht wie folgt aus:
Code:
und arrStudenten ist ein Array aus mehreren Instanzen der Klasse CStudent:
CStudent * CPruefungsamt::StudentenlisteSenden()
{ return arrStudenten; }
Code:
Was mache ich falsch?
CStudent arrStudenten[8];
Grüße |
Re: [C++] Pointer-Problem: illegal indirection
Hallo,
ich würde mal ein paar Variablen verwenden und dann den Debugger nehmen.
Delphi-Quellcode:
void CKommunikation::StudentenInfo(void)
{ arrayStudent *studentenliste; CStundent ??? studentenliste = pa.StudentenlisteSenden(); for (int i = 0; i < 8; i++) { CStudent = studentenliste[i]; cout << "Name: " << CStudent.NameSenden() << ", Matrikel-Nr.: " << CStudent .MatrikelNrSenden() << "\n"; } } Heiko |
Re: [C++] Pointer-Problem: illegal indirection
Hallo Heiko!
Zitat:
Zitat:
Grüße |
Re: [C++] Pointer-Problem: illegal indirection
*studentenliste[i].NameSenden()
Wenn das ein Array ist kannst du den * wahrscheinlich weglassen, da Arrays Pointer sind. |
Re: [C++] Pointer-Problem: illegal indirection
Der bislang völlig von C++ Verschonte wagt eine Antwort, mal sehen, was daraus wird :stupid: . Jedenfalls dürfte in C++ wie in C#[*] gelten, dass "*" als unärer Operator einen niedrigeren Rang als "." als primärer Operator einnimmt. Solange du also nicht den Rückgabewert der Methode dereferenzieren willst, musst du klammern oder "->" verwenden.
Zitat:
PS: Dass der Compiler den nicht-passenden Typen überhaupt nicht beim Namen nennen, könnte man ja fast als blanken Hohn ansehen... aber mit seinen knapp 30 Jahren kann man das der Sprache wohl noch verzeihen ;) . [edit] @Torpedo: So wie ich mein Zitat verstanden habe, kann der .-Operator nur nach dem Dereferenzieren der Klasse benutzt werden - sonst wäre sein "->"-Kumpane ja völlig witzlos. [/edit] |
Re: [C++] Pointer-Problem: illegal indirection
Hallo
Zitat:
Lasse ich das weg, erhalte ich diese Fehler: Zitat:
Edit: @Sebastian: Danke, doch damit geht's irgendwie auch nicht. Frustrationshalber habe ich alle Kombinationan ausprobiert: Mit * und ->, ohne Stern und -> etc. *g* Aber alles hilft nicht. |
Re: [C++] Pointer-Problem: illegal indirection
Zitat:
Vielleicht hat auch Khabarakh recht, probiers mal aus. EDIT: So wie ich das verstehe greifst du mit dem zusätzlichen * auf das 1. Element im Array zu. Da dieses Element aber kein Array ist, kann dann nicht mit [i] auf dessen Elemente zugegriffen werden. Ich weiß aber nicht ob * oder [] einen höheren Stellenwert hat, also kann auch umgekehrt sein. |
Re: [C++] Pointer-Problem: illegal indirection
Zitat:
Wir wollen also folgende Reihenfolge erreichen:
|
Re: [C++] Pointer-Problem: illegal indirection
Moin,
danke für die Mühe, aber irgendwie bin ich zu blöd dafür. *g* Ich habe ja den Pointer aufs 1. Arrayelement. Damit ich direkt das Array nutzen kann, muss ich das doch dereferenzieren mittels * und dann müsste ich's doch normal nutzen können. Daher hätte ich es der Überlegung nach so gemacht:
Code:
Aber das geht auch nicht. Wo sollen deiner Meinung nach denn die Klammern hin?
(*studentenliste)[i].NameSenden()
|
Re: [C++] Pointer-Problem: illegal indirection
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Bei mir funktionierts so.
cout << "Name: " << studentenliste[i].NameSenden() << ", Matrikel-Nr.: " << studentenliste[i].MatrikelNrSenden() << "\n";
Habe es mal kurz nachprogrammiert (Achtung, Klassen abgeändert) Im Anhang habe ich den Quellcode. Getestet mit g++. Ausgabe: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz