it-swarm.com.de

Ungelöstes externes Symbol LNK2019

Zunächst einmal weiß ich, dass diese Frage überall auf dieser Website zu finden ist, aber ich habe fast alle angeschaut und kann nicht herausfinden, was falsch ist. Dies ist in VS 2012. Danke.

//Socket.h
#pragma once

#include <iostream>
#include <WinSock2.h>

using namespace std;

const int STRLEN = 256;

class Socket
{
    protected:
        WSADATA wsaData;
        SOCKET mySocket;
        SOCKET myBackup;
        SOCKET acceptSocket;
        sockaddr_in myAddress;
    public:
        Socket();
        ~Socket();
        bool SendData( char* );
        bool RecvData( char*, int );
        void CloseConnection();
        void GetAndSendMessage();
};

class ServerSocket : public Socket
{
    public:
        void Listen();
        void Bind( int port );
        void StartHosting( int port );
};

class ClientSocket : public Socket
{
    public:
        void ConnectToServer( const char *ipAddress, int port );
};

Hier ist Socket.cpp

//Socket.cpp


#include "stdafx.h"
#include "Socket.h"


Socket::Socket()
{
    if( WSAStartup( MAKEWORD(2, 2), &wsaData ) != NO_ERROR )
    {
        cerr<<"Socket Initialization: Error with WSAStartup\n";
        system("pause");
        WSACleanup();
        exit(10);
    }

    //Create a socket
    mySocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

    if ( mySocket == INVALID_SOCKET )
    {
        cerr<<"Socket Initialization: Error creating socket"<<endl;
        system("pause");
        WSACleanup();
        exit(11);
    }

    myBackup = mySocket;
}

Socket::~Socket()
{
    WSACleanup();
}

bool Socket::SendData( char *buffer )
{
    send( mySocket, buffer, strlen( buffer ), 0 );
    return true;
}

bool Socket::RecvData( char *buffer, int size )
{
    int i = recv( mySocket, buffer, size, 0 );
    buffer[i] = '\0';
    return true;
}

void Socket::CloseConnection()
{
    //cout<<"CLOSE CONNECTION"<<endl;
    closesocket( mySocket );
    mySocket = myBackup;
}

void Socket::GetAndSendMessage()
{
    char message[STRLEN];
    cin.ignore();//without this, it gets the return char from the last cin and ignores the following one!
    cout<<"Send > ";
    cin.get( message, STRLEN );
    SendData( message );
}

void ServerSocket::StartHosting( int port )
{
     Bind( port );
     Listen();
}

void ServerSocket::Listen()
{
    //cout<<"LISTEN FOR CLIENT..."<<endl;

    if ( listen ( mySocket, 1 ) == SOCKET_ERROR )
    {
        cerr<<"ServerSocket: Error listening on socket\n";
        system("pause");
        WSACleanup();
        exit(15);
    }

    //cout<<"ACCEPT CONNECTION..."<<endl;

    acceptSocket = accept( myBackup, NULL, NULL );
    while ( acceptSocket == SOCKET_ERROR )
    {
        acceptSocket = accept( myBackup, NULL, NULL );
    }
    mySocket = acceptSocket;
}

void ServerSocket::Bind( int port )
{
    myAddress.sin_family = AF_INET;
    myAddress.sin_addr.s_addr = inet_addr( "0.0.0.0" );
    myAddress.sin_port = htons( port );

    //cout<<"BIND TO PORT "<<port<<endl;

    if ( bind ( mySocket, (SOCKADDR*) &myAddress, sizeof( myAddress) ) == SOCKET_ERROR )
    {
        cerr<<"ServerSocket: Failed to connect\n";
        system("pause");
        WSACleanup();
        exit(14);
    }
}

void ClientSocket::ConnectToServer( const char *ipAddress, int port )
{
    myAddress.sin_family = AF_INET;
    myAddress.sin_addr.s_addr = inet_addr( ipAddress );
    myAddress.sin_port = htons( port );

    //cout<<"CONNECTED"<<endl;

    if ( connect( mySocket, (SOCKADDR*) &myAddress, sizeof( myAddress ) ) == SOCKET_ERROR )
    {
        cerr<<"ClientSocket: Failed to connect\n";
        system("pause");
        WSACleanup();
        exit(13);
    } 

}

Und hier ist stdafx.h

#pragma once

#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>

// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>


// TODO: reference additional headers your program requires here
#include "Socket.h"

Und hier sind meine Fehlermeldungen:

1>------ Build started: Project: Client, Configuration: Debug Win32 ------
1>  stdafx.cpp
1>  Socket.cpp
1>  Client.cpp
1>  Generating Code...
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: void __thiscall ServerSocket::Listen(void)" ([email protected]@@QAEXXZ)
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: void __thiscall ServerSocket::Bind(int)" ([email protected]@@[email protected])
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: void __thiscall Socket::CloseConnection(void)" ([email protected]@@QAEXXZ)
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: void __thiscall ClientSocket::ConnectToServer(char const *,int)" ([email protected]@@[email protected])
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: void __thiscall ServerSocket::Bind(int)" ([email protected]@@[email protected])
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: void __thiscall ServerSocket::Bind(int)" ([email protected]@@[email protected])
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: void __thiscall ServerSocket::Listen(void)" ([email protected]@@QAEXXZ)
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: bool __thiscall Socket::RecvData(char *,int)" ([email protected]@@[email protected])
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: bool __thiscall Socket::SendData(char *)" ([email protected]@@[email protected])
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: __thiscall Socket::Socket(void)" ([email protected]@[email protected])
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: __thiscall Socket::Socket(void)" ([email protected]@[email protected])
1>Socket.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: __thiscall Socket::Socket(void)" (?[email protected]@[email protected])
1>C:\Users\ajayp_000\documents\visual studio 2012\Projects\Client\Debug\Client.exe : fatal error LNK1120: 12 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
35
Iowa15

Das Problem ist, dass Sie nicht mit der Bibliothek Ws2_32.lib verknüpfen. Um dies zu beheben, können Sie das zu Ihrer zusätzlichen Abhängigkeits-Registerkarte der Linker/Eingabe-Einstellungen für Ihr Projekt hinzufügen. Alternativ (wie von SChepurin in den Kommentaren angegeben) können Sie hinzufügen 

#pragma comment(lib, "Ws2_32.lib")

in eine Quelldatei Ihres Projekts. 

94
drescherjm

Eine andere Möglichkeit ist, dass Sie in Visual Studio mit der rechten Maustaste klicken und in den folgenden Pfad gehen und "Ws2_32.lib" in der . Linker> Eingabe> Zusätzliche Abhängigkeiten hinzufügen

Bildbeschreibung hier eingeben

1
eliasetm

Fügen Sie runtimeobject.lib zum Linker Zusätzliche Abhängigkeiten hinzu (auf der Projekteigenschaftsseite unter Linker -> Input ).

0
yoel halb