2013-07-09 4 views
5

Ich habe ein Problem mit dem folgenden Code:Warum ändert Visual C++ den Namen meiner Methode?

class MainWindow 
{ 
... 
private: 
bool CreateWindow(std::string, int, int, int, bool); 
... 
} 

und

bool MainWindow::CreateWindow(std::string title, int width, int height, 
int bits, bool fullscreen) 
{ 
... 

Visual Studio unterstreicht die Methodendefinition mit dem folgenden Fehler:

int reateWindow(std::string title, int width, int height, int bits, bool fullscreen) 
Error: class "MainWindow" has no member called "CreateWindowExW" 

und der Compiler gibt die folgenden :

warning C4003: not enough actual parameters for macro 'CreateWindowW' 
error C2039: 'CreateWindowExW' : is not a member of 'MainWindow' 

Ich bemerkte, dass wenn ich den Methodennamen zu etwas anderem ändere, das nicht mit einem Großbuchstaben C beginnt, verschwindet der Fehler. Ich bin neu in der Windows-Entwicklung. Was gibt?

+3

TL; DR: weil es ein Makro mit dem gleichen Namen gibt. –

+3

Dumme Windows-Makros. – Xeo

+0

versuchen, Klassen- und Funktionsnamen zu vermeiden, die Windows bereits verwendet, verhindert andere Pre-Prozessor Substitution und Link-Probleme. – alexbuisson

Antwort

11

Es ist einfach, weil CreateWindow ist ein Makro von Microsoft erstellt ... Es ist in WinUser.h definiert.

+0

Danke an alle, die geantwortet haben! –

+2

Vergessen Sie nicht, Ihre Frage als beantwortet zu markieren, um sie aus unbeantworteten Fragen zu entfernen :-) –

+1

besser einen Rep-Pimp erwerben, um Rep-Whoring zu vermeiden ;-) – TemplateRex

Verwandte Themen