Umstieg von C# auf C++
-
Guten Tag miteinander,
Also zuerst mal etwas zu meinen Kenntnissen.
Die letzten 3 1/2 Jahre wurde ich auf C# ausgebildet. Während der Ausbildung bekam ich auch Einsicht in andere Programmiersprachen wie VB oder JAVA. Dies sind jedoch alles Top-Level Sprachen.Daher begann ich mich mit c++ auseinander zu setzen, aber ich scheitere schon bei den Grundlagen und möchte hier um ein wenig Hilfe bitten.
Das es ein Forum für Windows-Programmierung gibt habe ich gesehen. Im Code verwende ich die WinSock2.h jedoch hat meine Frage nichts spezifisch mit der Socket Programmierung zu tun sondern mit c++ im allgemeinen.
Ich habe eine Klasse in einem eigenen .cpp-File. Dazu habe ich wie es sich gehört ein .h File erstellt wo die Definitionen abgelegt sind.
Diese Files sehen so aus:
.h#ifndef SOCKETTOOLS_H_INCLUDED #define SOCKETTOOLS_H_INCLUDED #include <iostream> #include <WinSock2.h> class SocketTools { public: SocketTools(); ~SocketTools(); char* ParseSocketError(unsigned int u_intError); }; #endif // SOCKETTOOLS_H_INCLUDED.cpp
#include <iostream> #include <WinSock2.h> class SocketTools { public: SocketTools() { } ~SocketTools() { } char* ParseSocketError(unsigned int u_intError) { switch(u_intError) { case WSANOTINITIALISED: return "WSANOTINITIALISED"; case WSAENETDOWN: return "WSAENETDOWN"; case WSAEACCES: return "WSAEACCES"; case WSAEADDRINUSE: return "WSAEADDRINUSE"; case WSAEADDRNOTAVAIL: return "WSAEADDRNOTAVAIL"; case WSAEFAULT: return "WSAEFAULT"; case WSAEINPROGRESS: return "WSAEINPROGRESS"; case WSAEINVAL: return "WSAEINVAL"; case WSAENOBUFS: return "WSAENOBUFS"; case WSAENOTSOCK: return "WSAENOTSOCK"; } } };Im main.cpp include ich nun das Header-File mit der folgenden Zeile:
#include "SocketTools.h"Nun kommen wir zu meinem Problem. Das Problem tritt bei der Instanzierung der Klasse auf. So wie ich dies bis jetzt aus C# kenne, kann ich dies so instanzieren und danach benutzen:
SocketTools* socketTools = new SocketTools; socketTools->ParseSocketError((unsigned int)error);In diesen Zeilen kriege ich vom Compiler (GCC) die Fehlermeldung:
undefined reference toSocketTools::SocketTools() undefined reference toSocketTools::ParseSocketError(unsigned int)Aber warum ? Ich habe diese Methoden ja im Header File angegeben und im Source File auscodiert ? Was mache ich falsch ? Verstehe ich etwas im Aufbau nicht richtig ?
-
die beiden includes im header sind sinnlos
im source musst du nur den header includieren aber darfst nicht noch mal die struktur abbilden, eine fkt geht so zu implementieren:
SocketTools::SocketTools() {}bb
-
Ja auch darüber bin ich auch schon gestolpert.
Also über die SchreibweiseSocketTools::SocketTools() { }Jedoch habe ich das so verstanden, dass ich eine Funktion so ausprogrammeiren muss wenn ich sie nicht innerhalb der Klassen Definition schreibe sprich innerhalb dieser Code Zeilen schreibe.
class SocketTools { //Functions };Habe ich dies falsch verstanden ?
-
"Habe ich dies falsch verstanden ?"
Japp - nehm dir mal noch mal das (C++-)Buch deiner Wahl vor, dort sollte das alles beschrieben und erklärt stehen - besser, als ich das jz kann...bb
-
Ok, danke für die wirklich sehr schnelle Hilfe ! Top !

Komme hier gern wiedereinmal vorbei.
-
Nein, aber die Funktionsdefinition ist ja nicht innerhalb der Klassendeklaration, denn die ist im Header. Du kannst die Klasse nicht einfach nochmal deklarieren.