#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的头文件。我准备了几个结构,你可以看到我将在我的程序的另一部分中使用它。现在,struct PlayerData使用Predefined :: Vector2对象,该对象是我在Predefined.h中创建的自定义结构,它包含在当前头文件中。
问题是我收到了这个错误:
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;
};
}
我不知道发生了什么,因为据我所知,所有内容都应该链接起来。我希望我的问题很清楚,有人可以帮我解决这些错误。
答案 0 :(得分:1)
这是一个肤浅的概述,但你的“Predefined.h”包含两个截然不同的部分;第一个是你的Vector
类,第二个是包含应用程序逻辑的更复杂的类。要解决这个问题,您实际上需要三个头文件:
Vectors.h
- &gt;应定义Vector2
和Vector3
,并包含应用程序结构的 none PacketDefines.h
- &gt;应#include "Vectors.h"
而不是其他任何内容(不需要包含Predefined.h
)。Connection.h
- &gt;应#include "PacketDefines.h"
。超出此问题的范围,我还建议将标题名称更改为更有意义的内容(是的,标题通常是声明符号和定义结构;那么什么?)。