Ich erhalte einen Fehler beim Versuch, mein C++ - Projekt zu erstellen.Kollision mit eingebauten Funktionen benennen?
Ich versuche ein Cross-Plattform-Projekt mit Sockets zu erstellen. Unter Windows muss ich closesocket
aufrufen, wenn ein Socket geschlossen ist, und auf Linux, ich rufe nur schließen.
Also, eine plattformübergreifende Lösung zu machen, ich folgendes in meiner Basisklasse definiert:
#define closesocket close
In meiner Klasse Code, ich habe dann:
class TCPClient {
void TCPClient::close()
{
closesocket(m_socket);
}
}
Allerdings habe ich jetzt erhalten die folgende Fehlermeldung, wenn ich zu bauen versuchen:
projects/cpp_sockets/src/project/tcp_client.cpp: In member function ‘void TCPClient::close()’:
/home/optonox/Documents/projects/cpp_sockets/src/project/tcp_client.cpp:44:22: error: no matching function for call to
‘TCPClient::close(SOCKET&)’
closesocket(m_socket);
^ /home/optonox/Documents/projects/cpp_sockets/src/project/tcp_client.cpp:42:6: note: candidate: void TCPClient::close()
void TCPClient::close()
^~~~~~~~~
/home/optonox/Documents/projects/cpp_sockets/src/project/tcp_client.cpp:42:6: note: candidate expects 0 arguments, 1
provided
src/project/CMakeFiles/cpp_sockets.dir/build.make:110: recipe for target 'src/project/CMakeFiles/cpp_sockets.dir/tcp_c
ich würde vermuten, was passiert ist, dass closesocket
ist typedef
d als close
so versucht es, die TCPclient
Mitgliedsfunktion aufzurufen?
A. Ist das was passiert? und B. Wie würde ich das verhindern?
Das Projekt kompiliert in Ordnung, wenn ich diesen Aufruf an auskommentieren.
Fantastisch. Kristallklare Antwort. – Startec
Ich hätte eine Wrapper-Funktion definiert, anstatt ein Makro '# define' zu verwenden:' int closesocket (int fd) {return :: close (fd); } '. –
@RemyLebeau, das die Plattformunterschiede, die das Makro tat, nicht ansprechen würde. – Startec