对象x不是struct y的成员

时间:2014-10-26 14:07:29

标签: c++

#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;
};
}

我不知道发生了什么,因为据我所知,所有内容都应该链接起来。我希望我的问题很清楚,有人可以帮我解决这些错误。

1 个答案:

答案 0 :(得分:1)

这是一个肤浅的概述,但你的“Predefined.h”包含两个截然不同的部分;第一个是你的Vector类,第二个是包含应用程序逻辑的更复杂的类。要解决这个问题,您实际上需要三个头文件:

  • Vectors.h - &gt;应定义Vector2Vector3,并包含应用程序结构的 none
  • PacketDefines.h - &gt;应#include "Vectors.h"而不是其他任何内容(不需要包含Predefined.h)。
  • Connection.h - &gt;应#include "PacketDefines.h"

超出此问题的范围,我还建议将标题名称更改为更有意义的内容(是的,标题通常是声明符号和定义结构;那么什么?)。