0

Код:

//#include <SFML/Graphics.hpp>
//#include <SFML/Audio.hpp>
#include <SFML/Network.hpp>
#include "iostream"
#include "string"
using namespace sf;
using namespace std;

//SERVER
class Server
{
private:
    IpAddress ip;
    unsigned short port;
    TcpSocket socket;
    TcpListener listener;
public:
    Server()
    {
        cout << "Enter port number: ";
        cin >> port;
        start();
    }
    Server(unsigned short port)
    {
        this->port = port;
        start();
    }
    void start()
    {
        if (listener.listen(port) != Socket::Done)
        {
            cout << "Error: cant use this port!" << endl;
            system("pause");
            return;
        }
        if (listener.accept(socket) != Socket::Done)
        {
            cout << "Error: cant up the server!" << endl;
            system("pause");
            return;
        }
        string msg = "Server run at: " + ip.toString();
        socket.send(msg.c_str(), 33);
    }
};

//CLIENT
class Client
{
private:
    unsigned short port;
    IpAddress ip;
    TcpSocket socket;
public:
    Client()
    {
        cout << "Enter server IP: ";
        cin >> ip;
        cout << "Enter server port number: ";
        cin >> port;
    }
    Client(string ip, unsigned short port)
    {
        this->ip = ip;
        this->port = port;
        start();
    }
    void start()
    {
        Socket::Status status = socket.connect(ip, port);
        if (status != Socket::Done)
        {
            cout << "Error: server is not online!" << endl;
            return;
        }
        socket.send("Hello, I'm client!", 18);
        /*while (true)
        {

        }*/
    }
};

void main()
{
    setlocale(LC_ALL, "");
    string type;
    cout << "Enter type ($server or $client): ";
    cin >> type;
    if (type == "$server")
    {
        Server * server = new Server();
    }
    else if (type == "$client")
    {
        Client * client = new Client();
    }
}

Зеленый кружок запускается, SFML подключен и нормально работает. Не работает только Network. Почему? Список ошибок (тут приведено нескольно, но они все похожи):

    Ошибка  LNK2019 ссылка на неразрешенный внешний символ "__declspec(dllimport) public: __cdecl sf::TcpSocket::TcpSocket(void)" (__imp_??0TcpSocket@sf@@QEAA@XZ) в функции "public: __cdecl Client::Client(void)" (??0Client@@QEAA@XZ)    test_sfml   C:\Users\zero\source\repos\test_sfml\test_sfml\Source.obj   1   

    Ошибка  LNK2019 ссылка на неразрешенный внешний символ "__declspec(dllimport) public: enum sf::Socket::Status __cdecl sf::TcpSocket::send(void const *,unsigned __int64)" (__imp_?send@TcpSocket@sf@@QEAA?AW4Status@Socket@2@PEBX_K@Z) в функции "public: void __cdecl Server::start(void)" (?start@Server@@QEAAXXZ)    test_sfml   C:\Users\zero\source\repos\test_sfml\test_sfml\Source.obj   1   

    Ошибка  LNK2019 ссылка на неразрешенный внешний символ "__declspec(dllimport) public: virtual __cdecl sf::TcpSocket::~TcpSocket(void)" (__imp_??1TcpSocket@sf@@UEAA@XZ) в функции "int `public: __cdecl Client::Client(void)'::`1'::dtor$0" (?dtor$0@?0???0Client@@QEAA@XZ@4HA) test_sfml   C:\Users\zero\source\repos\test_sfml\test_sfml\Source.obj   1   

    Ошибка  LNK2019 ссылка на неразрешенный внешний символ "__declspec(dllimport) public: __cdecl sf::IpAddress::IpAddress(void)" (__imp_??0IpAddress@sf@@QEAA@XZ) в функции "public: __cdecl Client::Client(void)" (??0Client@@QEAA@XZ)    test_sfml   C:\Users\zero\source\repos\test_sfml\test_sfml\Source.obj   1   

    Ошибка  LNK2019 ссылка на неразрешенный внешний символ "__declspec(dllimport) public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl sf::IpAddress::toString(void)const " (__imp_?toString@IpAddress@sf@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) в функции "public: void __cdecl Server::start(void)" (?start@Server@@QEAAXXZ) test_sfml   C:\Users\zero\source\repos\test_sfml\test_sfml\Source.obj   1   

    Ошибка  LNK2019 ссылка на неразрешенный внешний символ "__declspec(dllimport) class std::basic_istream<char,struct std::char_traits<char> > & __cdecl sf::operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class sf::IpAddress &)" (__imp_??5sf@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@std@@AEAV12@AEAVIpAddress@0@@Z) в функции "public: __cdecl Client::Client(void)" (??0Client@@QEAA@XZ)  test_sfml   C:\Users\zero\source\repos\test_sfml\test_sfml\Source.obj   1   

    Ошибка  LNK2019 ссылка на неразрешенный внешний символ "__declspec(dllimport) public: __cdecl sf::TcpListener::TcpListener(void)" (__imp_??0TcpListener@sf@@QEAA@XZ) в функции "public: __cdecl Server::Server(void)" (??0Server@@QEAA@XZ)  test_sfml   C:\Users\zero\source\repos\test_sfml\test_sfml\Source.obj   1   

Void
  • 13
  • Что то я не пойму: что у вас работает при ошибках линковки? Что за зелёный кружок? Что у вас запускается при не собранной программе? – Andrej Levkovitch Apr 18 '20 at 16:18
  • Здравствуйте, работает следующий код: `#include <SFML/Graphics.hpp>

    int main() { sf::RenderWindow window(sf::VideoMode(200, 200), "Lesson 1. kychka-pc.ru"); sf::CircleShape shape(100.f); shape.setFillColor(sf::Color::Green);

    while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); }

    window.clear(); window.draw(shape); window.display(); }

    return 0; }`

    – Void Apr 18 '20 at 16:27
  • то есть когда использую <SFML/Graphics.hpp>, все пашет. когда подключаю <SFML/Network.hpp и пишу sf::TcpSocket socket; прилетает Ошибка LNK2019 ссылка на неразрешенный внешний символ "__declspec(dllimport) public: __cdecl sf::UdpSocket::UdpSocket(void)" (__imp_??0UdpSocket@sf@@QEAA@XZ) в функции main test_sfml C:\Users\zero\source\repos\test_sfml\test_sfml\test.obj 1 – Void Apr 18 '20 at 16:36
  • 1
    очевидно не линкуете Network – user7860670 Apr 18 '20 at 16:37
  • да, но как это исправить? я качал разные версии библиотеки, все равно не работает. и что значит не линкуется? попробую другую версию visual studio поставить, но думаю бесполезно – Void Apr 18 '20 at 16:39
  • 1
    Ознакомьтесь со стадиями сборки в С++, в т.ч. с линкером. читайте вопрос-дубликат, и доки по sfml, там у них даже где-то была специальная табличка со списком для линковки – user7860670 Apr 18 '20 at 16:40

0 Answers0