error LNK2001: Nicht aufgelöstes externes Symbol



  • #include <WinSock.h>
    #include <string>
    #include <iostream>
    using namespace std;
    
    class test {
    
    public:
    
    	static sockaddr_in client;
    
        [...]
    };
    
    while (1) handle.start(s, test::client);
    

    Vorerst: Ja, ich habe die wsock32.lib dazugelinkt, das ist auch gar nicht das Problem. Der Compiler beschwert sich über das "test::client" in der while-Schleife. Dort kommt dann folgende Meldung:

    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static struct sockaddr_in test::client" (?client@test@@2Usockaddr_in@@A)".

    Zuvor wurde der sockaddr_in Struktur in einer Methode der Klasse test Werte zugewiesen. Wieso kann ich diese Struktur jetzt nicht übergeben, bzw. nicht auf die Werte über test::client zugreifen?



  • in winsock.h gibts nur

    struct sockaddr_in {
            short   sin_family;
            u_short sin_port;
            struct  in_addr sin_addr;
            char    sin_zero[8];
    }
    

    ;

    static struct sockaddr_in gibts nicht.

    Hat es übrigens einen speziellen grund warum du nicht winsock2 benutzt?



  • ich vergaß:
    Thou shalt know your header
    😉



  • noergel schrieb:

    Thou shalt know your header

    Thema verfehlt.

    @Celebrariel:
    Du hast deine statische Membervariable nur deklariert, du musst sie noch definieren, in einer deiner Quellcodedateien.



  • für den fall das du das struct aus winsock nutzen willst und keinen eigenen datentyp bauen willst:
    nimm das static weg und es compiliert.

    an den herrn "thema verfehlt":
    in winsock.h gibts nichts was static sockaddr_in heißt also fehlt die deklaration. das weiß der linker und mecker bei der definition.



  • Danke, es funktioniert jetzt.
    Gibt es denn einen bestimmten Grund weshalb man Winsock2 benutzen sollte?



  • noergel schrieb:

    in winsock.h gibts nichts was static sockaddr_in heißt

    Natürlich nicht. Kann es sein, dass du nicht weißt, was static bedeutet?

    noergel schrieb:

    also fehlt die deklaration. das weiß der linker und mecker bei der definition.

    Au weia.

    Wenn die Deklaration fehlen würde, würde sich der Compiler beschweren, und der Linker käme gar nicht zum Einsatz.


Anmelden zum Antworten