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 to SocketTools::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 Schreibweise

    SocketTools::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.


Anmelden zum Antworten