Pointer
-
Alles funktioniert nur bei der Funktion f bekomme ich eine Kompilerfehlermeldung.
Fehler E2093 w.cpp 9: 'operator*' ist im Typ 'vector<int,allocator<int> >' f³r A
rgumente desselben Typs nicht implementiert in Funktion f(vector<int,allocator<i
nt> >
Aber ich kann mit der Meldung nichts Anfangen ...
#include <iostream> #include <fstream> #include <vector> using namespace std; void f ( vector<int> * dat ) { cout<<"vector: " << *dat[0] << endl; } void ar ( int *var[] ) { cout<<"ar: " << *var[0]<<endl; } void T ( int **p ) { cout<<"**p: " << **p<<endl; } int main(int argc, char*argv[]) { cout<<"argv[0]: " <<argv[0]<<endl; vector<int>dd; dd.push_back(8); f ( &dd ); int e = 20; int *q = &e; T ( &q ); ar(&q); return 0; }
-
_ptr** schrieb:
Aber ich kann mit der Meldung nichts Anfangen ...
*dat[0] heißt *(dat[0]). Jetzt besser?
-
Nein ... ich kriegs noch immer nicht hin. -.-
-
Du stolperst darüber, dass es zwei Reihenfolgen der Auswertung gibt, aber nicht diejenige, die Du denkst genommen wird (Operator-Precedence)
void f ( vector<int> * dat ) { cout<<"vector: " << *dat[0] << endl; // zwei Operatoren: operator* und operator[], welcher wird zuerst ausgewertet? // a) [] vor *, also *(dat[0]): // dat[0] ist vector<int>, was ist dann *(dat[0])? // b) * vor [], also (*dat)[0]: // *dat ist auch vector<int>, was ist dann (*dat)[0]? }Du musst explizit klammern.
-
Möchtest du explizit die Anwendung von Pointern testen? Oder gibt es einen anderen guten Grund, dass du den vector nicht als Referenz übergibst?
-
Precedence schrieb:
// was ist dann *(dat[0])?
// (dat[0]) ist vector<int> ??
// b) * vor [], also (dat)[0]:
// *dat ist auch vector<int>, was ist dann (*dat)[0]? vector<int> ??So gehts jetzt jedenfalls -> (*dat)[0]
@daddy_felix
Ich bin nur etwas am Üben was Pointer angeht.
-
_ptr** schrieb:
Precedence schrieb:
// was ist dann *(dat[0])?
// (dat[0]) ist vector<int> ??
// b) * vor [], also (dat)[0]:
// *dat ist auch vector<int>, was ist dann (*dat)[0]? vector<int> ??- ist das Ergebnis von
vector<int>::operator*(vector<int>)
(nicht implementiert) -> Der Compilerfehler vom Anfang. d.h. so hat es Dein Compiler ohne Klammerung aufgefasst. - ist das Ergebnis von
vector<int>::operator[](vector<int>::size_type)Aha! ein int&...
Durch die ganzen Typen ist das jetzt ein wenig unverständlich.
Schau Dir eine Auflistung der Operator-Präzedenz in C++ an. Überzeug Dich, dass[]eher ausgewertet wird als*. Dann wird Dir auch klar, warum Du so klammern musst (*dat)[0].hth
- ist das Ergebnis von