0

我在头文件 Player.h 中声明了一个结构,我想在另一个类中使用它,但我无法让它工作。我已将 Player.h 包含在其他类中,但它说

错误 C2011:“点”:“结构”类型重新定义。

我错过了什么?

在 Player.h 中

struct Point {  
    int x, y;
    char name[20]; 
};


class Player
{
    public:
    Player(void);
    ~Player(void);

    std::vector<Point> rocketVector;
    private:
};
4

2 回答 2

2

您的头文件需要包含警卫

#ifndef MY_HEADER // or some other unique name
#define MY_HEADER
struct Point {  
    int x, y;
    char name[20]; 
};


class Player
{
    public:
    Player(void);
    ~Player(void);

    std::vector<Point> rocketVector;
    private:
};
#endif

包含保护的目的是防止在翻译单元中包含多个标题(直接或间接通过其他标题)。当您说#include "something"预处理器基本上只是将头文件粘贴到指令的位置时。如果这种情况发生多次(如您的情况),您将获得同一类的多个定义或标题中定义的任何其他内容。

于 2013-08-22T10:55:30.943 回答
0

您只需要#pragma once在头文件的开头添加,或者著名的技巧:

#ifndef __PLAYER_H
#define __PLAYER_H

//content of Player.h

#endif
于 2013-08-22T10:54:05.393 回答