C ++:跨类的结构

时间:2011-03-21 01:09:18

标签: c++ class struct

我有两个类:MazeClass和CreatureClass,它们使用一个名为“coordinates”的结构,我怎样才能在两个类中使用结构? 我试过把结构放两次,然后得到:

  

MazeClass.h:16:8:错误:重新定义'struct coordinate'

     

CreatureClass.h:11:18:错误:'struct coordinate'的先前定义

4 个答案:

答案 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"