2014-10-26 14 views
0
#pragma once 
#include "Predefined.h" 

#include <string> 
#include <vector> 

using namespace std; 

namespace Packets 
{ 
enum { EnumLoginData, EnumPlayerData }; 

struct LoginData 
{ 
    std::string username; 
    std::string password; 
}; 

struct PlayerData 
{ 
    Predefined::Vector2 position; 
}; 

struct MainPacket 
{ 
    char type; 
    int id; 

    LoginData loginData; 
    vector<PlayerData> playerData; 
}; 
} 

Код, указанный выше, представляет собой один заголовочный файл PacketDefines.h. У меня есть несколько структур, подготовленных, так как вы можете видеть, что я буду использовать в другой части моей программы. Теперь структура PlayerData использует объект Predefined :: Vector2, который является настраиваемой структурой, созданной в Predefined.h, которая включена в текущий файл заголовка.объект x не является членом struct y

Проблема заключается в том, что я получаю эту ошибку на нем:

error C2146: syntax error : missing ';' before identifier 'position' 

Кроме того, это делает его так, что еще что-то в коде, который зависит от этой структуры вызывает бросать ошибку:

error C2039: 'position' : is not a member of 'Packets::PlayerData' 

Это Предопределенные заголовочный файл:

#pragma once 

#include <iostream> 
#include <memory> 

#include "PacketDefines.h" 

// some other includes 

using namespace std; 

#define LOBBY_MAX_CONNECTIONS 5 

#define MAX_DATA_SIZE 512 

namespace Predefined 
{ 
struct Vector2 
{ 
    Vector2(float valueX = 0.0f, float valueY = 0.0f) : x(valueX), y(valueY) {} 

    float x; 
    float y; 
}; 

struct Vector3 
{ 
    Vector3(float valueX = 0.0f, float valueY = 0.0f, float valueZ = 0.0f) : x(valueX), y(valueY), z(valueZ) {} 

    float x; 
    float y; 
    float z; 
}; 

struct Connection 
{ 
    int ID; 
    SOCKET socket; 
    Packets::PlayerData playerData; 
}; 

struct Lobby 
{ 
    string lobbyName; 
    vector<Connection> connectionList; 
}; 
} 

Я понятия не имею, что происходит так насколько мне известно, все связано так, как должно. Надеюсь, моя проблема ясна, и кто-то может помочь мне решить эти ошибки.

+1

Они включают друг друга. Это называется циклической зависимостью. Вам нужно как-то удалить эту зависимость. – Ben

+0

Я проверю. Дело в том, что они нужны друг другу, и я хочу сохранить их отдельно, а также – Dries

ответ

1

Это поверхностный обзор, но ваш «Predefined.h» содержит две отдельные секции; первыми являются ваши классы Vector, а второй - более сложные классы, которые содержат логику приложения. Чтобы преодолеть это, вы на самом деле нужно три файла заголовка:

  • Vectors.h -> Если определить Vector2 и Vector3, и включают в себя ни один ваших структур приложений
  • PacketDefines.h -> Должен #include "Vectors.h" и больше ничего (не необходимо включить Predefined.h).
  • Connection.h -> Должно #include "PacketDefines.h".

выходит за рамки этого вопроса, я бы также рекомендовать изменив имена заголовков на что-то более значимое (да, заголовки обычно объявить символы и определяют структуры,? Так что).

+0

Спасибо! Я попробую. Да, я, вероятно, буду называть вектор одним CustomMath или чем-то еще. Я придумаю лучшие имена – Dries

Смежные вопросы