我有两个类:MazeClass和CreatureClass,它们使用一个名为“coordinates”的结构,我怎样才能在两个类中使用结构? 我试过把结构放两次,然后得到:
MazeClass.h:16:8:错误:重新定义'struct coordinate'
CreatureClass.h:11:18:错误:'struct coordinate'的先前定义
答案 0 :(得分:6)
您应该只在头文件中定义一次结构。将coordinates
移动到自己的头文件中(带有包含保护),然后在其他两个标头中包含该标头。
示例coordinates.h
:
#ifndef COORDINATES_H
#define COORDINATES_H
struct coordinates {
// ...
};
#endif
从技术上讲,可以在两个标题中定义coordinates
(虽然从可维护性的角度来看很糟糕 - 保持DRY!)。当另一个头或实现文件包含这两个头(直接或间接)时出现问题 - 然后编译器看到两个不同的coordinates
结构定义(它不知道它们是相同的),并且抱怨你发布的错误。
答案 1 :(得分:3)
您可以在其中一个类中公开结构。选择更相关的类:
class MazeClass
{
public:
struct coordinate {} ;
} ;
其他类可以MazeClass::coordinate
访问此类型。或者你也可以带一个typedef。
class CreatureClass
{
public:
typedef MazeClass::coordinate coordinate ;
} ;
答案 2 :(得分:-1)
您需要将struct coordinate
的定义放在一个公共位置,而不是重复它。也许创建一个新的coordinate.h
文件?不要忘记使用包含警卫。
答案 3 :(得分:-1)
在代数中,这被称为“分解”共同因素。
创建“coordinate.h”文件。在其中,使用包含保护,放置坐标结构的定义。
然后在MazeClass.h和CreatureClass.h中使用#include "coordinate.h"
。