我有两个类:MazeClass和CreatureClass,它们使用一个名为“坐标”的结构,我如何能够跨两个类使用结构? 我试图把结构中的两次,我得到:C++:跨类结构
MazeClass.h:16:8: error: redefinition of ‘struct coordinate’
CreatureClass.h:11:18: error: previous definition of ‘struct coordinate’
我有两个类:MazeClass和CreatureClass,它们使用一个名为“坐标”的结构,我如何能够跨两个类使用结构? 我试图把结构中的两次,我得到:C++:跨类结构
MazeClass.h:16:8: error: redefinition of ‘struct coordinate’
CreatureClass.h:11:18: error: previous definition of ‘struct coordinate’
你可以在公共的一个类中声明结构体。选择类更相关:
class MazeClass
{
public:
struct coordinate {} ;
} ;
其他类可以访问此类型MazeClass::coordinate
。或者你可以带一个typedef。
class CreatureClass
{
public:
typedef MazeClass::coordinate coordinate ;
} ;
你需要把的struct coordinate
定义在一个共同的位置,而不是重复它。也许创建一个新的coordinate.h
文件?不要忘记使用包括守卫。
您应该只在整个头文件中定义一次结构。将coordinates
移动到它自己的头文件(带有一个包含保护)中,然后将这个头包含在你的其他头文件中。
例coordinates.h
:
#ifndef COORDINATES_H
#define COORDINATES_H
struct coordinates {
// ...
};
#endif
从技术上讲,这是确定的两个头定义coordinates
(尽管从维护的角度可怕的 - 保持DRY!)。当另一个头文件或实现文件同时包含这两个头文件(直接或间接)时,会出现问题 - 然后编译器会看到两个不同的结构体定义(它不知道它们是相同的),并且抱怨错误已发布。
在代数中,这被称为“因式分解”的共同因素。
创建一个“coordinate.h”文件。在它里面,使用include guard,放置你的坐标结构的定义。
然后在MazeClass.h和CreatureClass.h中使用#include "coordinate.h"
。
你能发表你的代码吗? – 2011-03-21 01:12:49
让我们来看看头文件,特别是如何声明类和坐标 – Mark 2011-03-21 01:13:29
这两个结构都是相同的吗?大多数答案都假设它们是,但是你可以很容易地在两种不同类型之间产生命名冲突。 – 2011-03-21 01:45:47