我在头文件Player.h中声明了一个结构体,我想在另一个类中使用它,但我无法使它工作。我在其他课程中包含了Player.h,但它说
错误C2011:'Point':'struct'类型重新定义。
我错过了什么?
在Player.h中
struct Point {
int x, y;
char name[20];
};
class Player
{
public:
Player(void);
~Player(void);
std::vector<Point> rocketVector;
private:
};
答案 0 :(得分:2)
您的头文件需要include guards。
#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"
时,预处理器基本上只是将头文件粘贴到指令的位置。如果这种情况多次发生(例如在您的情况下),您将获得同一类的多个定义或标题中定义的任何其他定义。
答案 1 :(得分:0)
你只需要在头文件的开头添加#pragma once
,或者着名的技巧:
#ifndef __PLAYER_H
#define __PLAYER_H
//content of Player.h
#endif