Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C++] Pointer-Problem: illegal indirection (https://www.delphipraxis.net/102976-%5Bc-%5D-pointer-problem-illegal-indirection.html)

Apollonius 7. Nov 2007 20:17

Re: [C++] Pointer-Problem: illegal indirection
 
Auch wenn ich nicht sehr oft mit C++ gearbeitet habe, würde ich intuitiv doch Torpedo zustimmen. Denn wenn ich einen int* habe, diesen als Array interpretiere und dann indexiere (und das gibts :shock: ), dann muss ich das nicht auch noch dereferenzieren. Zum Mitschreiben:
Code:
int* IntArray;
IntArray = new int[5]; //ist das so richtig?
//oder gerne auch mit malloc

IntArray[3] = 5;

delete IntArray;
Und jetzt lyncht mich.

Torpedo 7. Nov 2007 20:24

Re: [C++] Pointer-Problem: illegal indirection
 
@Apollonius:
Das ist mehr Java als C++ ;)

Hier mal ein Beispiel:
Code:
#include <iostream>
using namespace std;

int main() {
   int arr[5];      // Normales Array erstellen
   int * a = arr; // Das Programm kompiliert hier fehlerlos, weil ein array ein Pointer ist und damit mit int* kompatibel
   a[0] = 3; // Trotzdem kann man dann ohne * darauf zugreifen, weil das schon [] macht
   cout<<a[0]<<"\n"; // Es wird 3 ausgegeben
   return 0;
}

Matze 7. Nov 2007 20:26

Re: [C++] Pointer-Problem: illegal indirection
 
Tatsache, Torpedo hat recht. :thumb:

Der Fehler:

Zitat:

Error 1 error LNK2001: unresolved external symbol "public: int __thiscall CPruefung::NummerSenden(void)" (?NummerSenden@CPruefung@@QAEHXZ) CKommunikation.obj
Error 2 fatal error LNK1120: 1 unresolved externals D:\Eigene Dateien\...\Projekt_1.exe 1
trat auf, weil ich hier das "void" als "Parameter" vergessen hatte. :wall:

Code:
void CPruefung::NummerSenden()
Ich danke allen, die mir hier geantwortet haben. :)

Khabarakh 7. Nov 2007 20:27

Re: [C++] Pointer-Problem: illegal indirection
 
Aaaah, jetzt hab ich es auch verstanden. Glaube ich :mrgreen: . Wenn ich das richtig sehe, enthält das Array ja gar keine Zeiger, sondern direkt die Objekte (so langsam verstehe ich, warum C++ mit diesem Konzept ziemlich allein auf weiter Flur steht *g*), dann ist die Dereferenzierung per * oder -> natürlich komplett überflüssig. Die Dereferenzierung von CStudent* nach CStudent steckt ja schon im []-Operator.

[edit]
Jut, so langsam erreichen wir wohl Konsens ;) .
[/edit]

Apollonius 7. Nov 2007 20:28

Re: [C++] Pointer-Problem: illegal indirection
 
@Torpedo:
Das ist wohl ein Kompliment - ich habe mich nie im Entferntesten mit Java beschäftigt.
Aber sofern mich meine C-Kenntnisse nicht ganz verlassen haben, ist mein Code auch halbwegs korrekt, wenn ich ein dynamisches Array erstellen will - bei dir ist die Größe ja hartcodiert. Und falls das new nicht ganz stimmen sollte, kann man ja auch malloc(5*4) nehmen.

Matze 7. Nov 2007 20:37

Re: [C++] Pointer-Problem: illegal indirection
 
Zitat:

Zitat von Khabarakh
Aaaah, jetzt hab ich es auch verstanden. Glaube ich :mrgreen: [...] Die Dereferenzierung von CStudent* nach CStudent steckt ja schon im []-Operator.

Ach jetzt verstehe ich's auch so langsam. :mrgreen: Das hat Torpedo ja eigentlich auch geschrieben, nur war ich fest davon überzeugt, dass ich das manuell mit dem * machen muss. :angle2:

Nun habe ich hier 2 nützliche Dinge gelernt:

1. [] ist ein Operator (ich wusste das wirklich nicht)
2. [] dereferenziert gleich, sehr schön. :)

Danke nochmals.

OregonGhost 7. Nov 2007 21:04

Re: [C++] Pointer-Problem: illegal indirection
 
Etwas offtopic, aber vielleicht interessant für dich:
Zitat:

1. [] ist ein Operator (ich wusste das wirklich nicht)
Dann zieh dich schonmal warm an. Der Pfeil ->, die Klammern (), das Komma , , das Und &, der Punkt . usw. sind auch alle Operatoren. Aber das kranke daran ist, dass man sie (fast) alle überladen kann. Viel Spaß bei deiner weiteren Entdeckungsreise :mrgreen:

Matze 7. Nov 2007 21:12

Re: [C++] Pointer-Problem: illegal indirection
 
Hi

Zitat:

Zitat von OregonGhost
Dann zieh dich schonmal warm an. Der Pfeil ->, die Klammern (), das Komma , , das Und &, der Punkt . usw. sind auch alle Operatoren. Aber das kranke daran ist, dass man sie (fast) alle überladen kann. Viel Spaß bei deiner weiteren Entdeckungsreise :mrgreen:

Dass ->, & und . auch Operatoren sind, wusste ich, aber () und , ist mir neu.
Das mit dem Überladen lasse ich vorerst mal, sonst geht hinterher gar nichts mehr und ich blicke überhaupt nicht mehr durch. :mrgreen:

Danke für die Info. Man lernt eben nie aus. :)

Torpedo 7. Nov 2007 21:19

Re: [C++] Pointer-Problem: illegal indirection
 
Zitat:

Zitat von Matze
Das mit dem Überladen lasse ich vorerst mal, sonst geht hinterher gar nichts mehr und ich blicke überhaupt nicht mehr durch. :mrgreen:

Dabei soll es genau das Gegenteil bewirken ;) Verkettete Listen auf die man mit [] zugreifen kann sind doch viel durchsichtiger. ;)

Khabarakh 7. Nov 2007 21:33

Re: [C++] Pointer-Problem: illegal indirection
 
Zitat:

Zitat von Matze
[...]aber () und , ist mir neu.

Das sind sogar zwei ganz bitterböse :mrgreen: . Die normale Klammer "(a)" ist kein Operator (jedenfalls habe ich noch nie gelesen, dass sie als ein solcher irgendwo definiert wird), in einer prozessornäheren UPN-Schreibweise würde sie ja auch wegfallen. Überladen lässt sie sich einmal als Cast-Operator "(a)b" und einmal als Function-Call-Operator "f()". Zum Komma sage ich lieber nichts, denn nachdem ich wie du gerade zum ersten Mal überhaupt von ihm gehört habe, will ich ihn bis morgen lieber wieder vergessen ;) .

@Torpedo: Fragt sich, ob man eine verkettete Liste wirklich indizieren will :mrgreen: .


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz