error C2475"Erstellen eines Zeigers auf einen Member erfordert...."
-
Hallo
ich fange gelich mal an. Folgender Code lies sich Problemlos auf meinem alten Compiler (Visual Studio C++ 6.0) kompilieren. Mit meinem neuen Compiler (Visual Studio .NET 2003) enstehen beim kompilieren auf einmal (zumindest für mich
)unerklärliche Fehler...
Hier der Code
/*Das eigentliche Programm ist ein anderes, zur Darstellung des Fehlers sollte das aber reichen*/
[cpp]#include <iostream>
#include <string>
using namespace std;void main()
{
string i("Test");if(i.length != 0) //Hier der Fehler C2475
{
cout << "OK"<< endl;
}else
{
cout <<"Fehler"<< endl;
}
}error C2475: Erstellen eines Zeigers auf einen Member erfordert die explizite Verwendung des Adressoperators ('&') und einen gekennzeichneten Namen.
Wie gesagt, das ganze lies sich problemlos auf erst genanntem Compiler erstellen.
Danke & Mit freundlichen Grüßen
guestk5
-
Da war der VS 6.0 aber ganz schön nachlässig bei der Syntaxprüfung! length() von der Klasse string ist keine Eigenschaft sondern eine Methode. Du musst also die runden Klammern machen.
Allerdings ist die Fehlermeldung auch sehr irreführend (, was ich bei Microsoft Compiler und Interpreter generell sehr sehr schlecht finde!).
-
Die Fehlermeldungen sind aber nicht so schlecht wie bei devcpp
-
spjoe schrieb:
Die Fehlermeldungen sind aber nicht so schlecht wie bei devcpp
Gut möglich, ich halte von beiden nicht viel
.
-
eine zwischenfrage:
kompiliert das neue studio immernoch das falsche "void main"?
ich dachte, da wäre nun eine schranke...
-
Da war der VS 6.0 aber ganz schön nachlässig bei der Syntaxprüfung!
Also sowas ließ sich immer Problemlos kompilieren...
eine zwischenfrage:
kompiliert das neue studio immernoch das falsche "void main"?
ich dachte, da wäre nun eine schranke...Ich habs mit dem Code von oben getestet...bis auf die 2 Fehler von oben ging alles...
Danke nochmal. So gehts jetzt, ich finde die Fehlermeldung bei so 'nem Fehler aber ziemlich irreführend.
Noch eine kurze Frage:
Die Klammern müssen immer hinter einer Metode gesetzt werden, oder?
-
nimm trotzdem kein "void main", oder willst du gleich unstandardgemäß programmieren?
andere compiler nehmen es nicht mehr an.
-
Guestk5 schrieb:
Noch eine kurze Frage:
Die Klammern müssen immer hinter einer Metode gesetzt werden, oder?Korrekt. Eine Methode ist sozusagen eine Funktion einer Klasse und bei Funktionen musst du auch immer die Klammern hernehmen ;).
-
nimm trotzdem kein "void main", oder willst du gleich unstandardgemäß programmieren?
andere compiler nehmen es nicht mehr an.Normalerweise nehm ich sowieso int main().
Bin abre bis jetzt immer davon ausgegangen, das void main() besser ist...
Danke @all für die Auklärung
-
Guestk5 schrieb:
Normalerweise nehm ich sowieso int main().
Bin abre bis jetzt immer davon ausgegangen, das void main() besser ist...Was ist besser?
- Keine Informationen (-> void)
- Informationen (-> int)
Du fährst also ganz gut, wenn du int main() verwendest :).
-
Wenn aber sowieso kein Wert von der main()-Funktion zurückgegeben wird?!
-
Guestk5 schrieb:
Wenn aber sowieso kein Wert von der main()-Funktion zurückgegeben wird?!
Sollte aber! Auch wenn dein Programm keinen Fehler zurückgibt, sollte der Aufrufer dennoch wissen, dass es fehlerfrei aufgerufen und durchgeführt wurde.