SFML и C++ Уроки \ Разработка игр › Форумы › SFML Network › Ошибка при компиляции строки socket.receive();
В этой теме 6 ответов, 2 участника, последнее обновление tyman 7 года/лет, 7 мес. назад.
-
АвторСообщения
-
Здравствуйте, Не понимаю почему но у меня возникает ошибка когда я пытаюсь скомпилировать свое приложение
“Ошибка (активно) отсутствуют экземпляры перегруженная функция “sf::UdpSocket::receive”, соответствующие списку аргументов TestMultiplayerGame d:\Programming code c++\TestSfmlProject\TestSfmlProject\Player.cpp 72 ”
Вот кусок кода:C++12345void receiveCoordinate() { // Получает данные координаты + сторону движенияsocket.receive(packet, serverip, 2000);packet >> x >> y >> side;drawingOtherSprite();}Тут все правильно, дай больше инфы.
Проверь соотвецтвие типа данных пакета и сервера айпи
Вот весь класс:
C++1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192#include <SFML/Graphics.hpp>#include <SFML/Network.hpp>#include <iostream>//#include "ClientMultiplayer.cpp"; // Мультилпеерная часть клиентаusing namespace std;using namespace sf;class Player {public:// Multiplayerint x, y = 0;string stringIp;IpAddress myIp = IpAddress::getPublicAddress();IpAddress serverip;UdpSocket socket;Packet packet;Packet packetip;// Текущие координаты персонажаint coordX;int coordY;//========// Playerdouble speed = 2.5;int side;Texture texture;Sprite sprite;Player(String File, int x, int y, int side) { // Дописать отправку на сервер координат и side(направление)this->side = side;texture.loadFromFile(File);if (!texture.loadFromFile(File)) {std::cout << "Error";}sprite.setTexture(texture);switch (side) { //Блок sidecase 1:sprite.setTextureRect(IntRect(202, 0, 100, 100)); // поворот на левоbreak;case 2:sprite.setTextureRect(IntRect(101, 0, 100, 100)); // поворот на правоbreak;case 3:sprite.setTextureRect(IntRect(0, 0, 100, 100)); // поворот вверхbreak;case 4:sprite.setTextureRect(IntRect(303, 0, 100, 100)); // поворот внизbreak;}sprite.setPosition(x, y);}void controlling(float time) { // side тут нужен для отправки на сервер данных о том куда повернут персонаж(переделать его)coordX = sprite.getPosition().x;coordY = sprite.getPosition().y;if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { sprite.move(-speed*time, 0); sprite.setTextureRect(IntRect(202, 0, 100, 100)); side = 1; }if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { sprite.move(speed*time, 0); sprite.setTextureRect(IntRect(101, 0, 100, 100)); side = 2; }if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { sprite.move(0, -speed*time); sprite.setTextureRect(IntRect(0, 0, 100, 100)); side = 3; }if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { sprite.move(0, speed*time); sprite.setTextureRect(IntRect(303, 0, 100, 100)); side = 4; }}void coordinate() { // Вывод координатcout << "coordinate xx: " << coordX << " y: " << coordY << "\n";}// Multiplayervoid receiveCoordinate() { // Получает данные координаты + сторону движенияsocket.receive(packet, serverip, 2000);packet >> x >> y >> side;drawingOtherSprite();}void sendPacket() { // Отправка данных серверу}void connectionServer() { // Функция приконекта к серверуsocket.bind(2000);stringIp = myIp.toString();packetip << stringIp;socket.send(packetip, serverip, 2000);packetip.clear();}void drawingOtherSprite() { // Для отрисовкиPlayer otherplayer("image/people.png", x, y, side); // заменить на sprite.setPosition(x, y); + switch side}};Ты забыл забиндеть порт.
if (socket.bind(5400) != sf::Socket::Done) {// error… }
Уже увидел
Все разобрался проблема была в том что этот метод (.receive) не принимает 3 аргументом(порт) в виде простых цифр, нужно писать unsigned short port = /*port*/; что бы это заработало
Он не принимает порт, он принимает переменную куда запишет порт от куда пришло
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.