繁体   English   中英

C ++:跨类的结构

[英]C++: structs across classes

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

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

CreatureClass.h:11:18:错误:'结构坐标'的先前定义

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

coordinates.h示例:

#ifndef COORDINATES_H
#define COORDINATES_H

struct coordinates {
    // ...
};

#endif

从技术上讲,可以在两个标题中定义coordinates (虽然从可维护性的角度来看很糟糕 - 保持干燥 !)。 当另一个头或实现文件包含这两个头(直接或间接)时出现问题 - 然后编译器看到两个不同的coordinates结构定义(它不知道它们是相同的),并抱怨你的错误发布了。

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

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

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

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

您需要将struct coordinate的定义放在一个公共位置而不是复制它。 也许创建一个新的coordinate.h文件? 不要忘记使用包括警卫。

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

创建一个“coordinate.h”文件。 在其中,使用包含警戒,放置坐标结构的定义。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM