2011-03-21 81 views
2

我有两个类:MazeClass和CreatureClass,它们使用一个名为“坐标”的结构,我如何能够跨两个类使用结构? 我试图把结构中的两次,我得到:C++:跨类结构

MazeClass.h:16:8: error: redefinition of ‘struct coordinate’

CreatureClass.h:11:18: error: previous definition of ‘struct coordinate’

+1

你能发表你的代码吗? – 2011-03-21 01:12:49

+0

让我们来看看头文件,特别是如何声明类和坐标 – Mark 2011-03-21 01:13:29

+0

这两个结构都是相同的吗?大多数答案都假设它们是,但是你可以很容易地在两种不同类型之间产生命名冲突。 – 2011-03-21 01:45:47

回答

2

你可以在公共的一个类中声明结构体。选择类更相关:

class MazeClass 
{ 
public: 
    struct coordinate {} ; 
} ; 

其他类可以访问此类型MazeClass::coordinate。或者你可以带一个typedef。

class CreatureClass 
{ 
public: 
    typedef MazeClass::coordinate coordinate ; 
} ; 
0

你需要把的struct coordinate定义在一个共同的位置,而不是重复它。也许创建一个新的coordinate.h文件?不要忘记使用包括守卫。

5

您应该只在整个头文件中定义一次结构。将coordinates移动到它自己的头文件(带有一个包含保护)中,然后将这个头包含在你的其他头文件中。

coordinates.h

#ifndef COORDINATES_H 
#define COORDINATES_H 

struct coordinates { 
    // ... 
}; 

#endif 

从技术上讲,这是确定的两个头定义coordinates(尽管从维护的角度可怕的 - 保持DRY!)。当另一个头文件或实现文件同时包含这两个头文件(直接或间接)时,会出现问题 - 然后编译器会看到两个不同的结构体定义(它不知道它们是相同的),并且抱怨错误已发布。

0

在代数中,这被称为“因式分解”的共同因素。

创建一个“coordinate.h”文件。在它里面,使用include guard,放置你的坐标结构的定义。

然后在MazeClass.h和CreatureClass.h中使用#include "coordinate.h"