当前位置: 首页 > 知识库问答 >
问题:

前向声明和全局命名空间声明

赫连俊雄
2023-03-14

我有困难建立一个有3个类的结构。我不确定包含/转发声明。

下面的代码一直在编译,直到我在inclino.h中添加名称空间和枚举。我从Inclinomeasure.h收到“Inclino尚未声明”。

倾斜度。h

// Inclino.h
#include "InclinoMeasure.h"
#include "InclinoReading.h"

namespace inclino {
enum a{a1, a2}
}

class Inclino
{
    list<InclinoMeasure*> m_measures;

    void f(inclino::a a);
}

倾斜度

// InclinoMeasure.h
#include "InclinoReading.h"

class Inclino;

class InclinoMeasure
{
    Inclino *m_inclino;
    list<InclinoReading*> m_readings;

    void f(inclino::a a);
}

倾角读数.h

// InclinoReading.h

class Inclino;
class InclinoMeasure;

class InclinoReading
{
    InclinoMeasure *m_inclino;

    void f(inclino::a a);
}

结构正确吗?如何访问其他类中的枚举?

提前道谢。

编辑:我修复了名称空间的问题,把它放在一个新的文件,包括由3类。但我似乎误用了include/forward声明。

共有1个答案

暴绪
2023-03-14

我从Inclinomeasure.h收到“Inclino尚未声明”。

这是因为名称空间inclino和枚举a当前是在inclino.h中定义的,但是inclino.h不包括inclino.h(鉴于标头之间的当前关系,也不应该包括inclino.h,因为这会引入循环依赖关系)。类clinkino的前向声明与命名空间和枚举无关。

若要解决此问题,可以将命名空间和枚举的定义移动到inclinoreading.h

这将使它在使用它的所有三个头中都可用,因为Inclino.hInclinoMeasure.h都包含InclinoReading.h

 类似资料:
  • 如何在命名空间中转发声明类。例如,下面是一个库的头文件,用户不需要知道私有的myPtr,所以当包含在头文件下面时,不需要包含boost头文件。那么我如何向前声明boost::shared_ptr以启用用户代码编译呢? MyClass.h

  • 这是一个非常基本的问题,但实际上我从来没有自己定义过名称空间。我正在尝试将我的基于Qt的库中的类分组在各种名称空间中(并且还允许更容易的扩展而不发生名称冲突)。例如,主类(也表示库)属于顶级命名空间: 这个使用了一组其他名称空间和类,这些名称空间和类是在的头文件中定义的,这些头文件包含在的头文件中: 其中Manager.h包含 和configurator.h包含 类的内容在这里并不重要。 在编译时

  • 所以我对Qt和C++都是新手,但我想弄清楚下面的代码是怎么回事。 我有一个头文件和源文件charinfowindow。在我拥有的源文件中: 在头文件中 我试着找出这些代码在网上做什么,但我只是在找关于如何做的资源。 如果有人能告诉我,首先,这些代码是做什么的,其次,他们为什么这样做。不胜感激。 谢谢

  • 我对C++不是很熟悉,这是我第一次使用的不仅仅是名称空间std。下面的有什么区别? VS 在这两个之后,我现在似乎可以创建一个MyClass对象了。一种方式比另一种好吗?另外,如果我都不这样做,我还可以通过每次需要时在MyNamespace::MyClass之前附加MyClass来引用MyClass吗? 接下来,如果我使用第二个选项转发declare,我还需要吗?在我(不是很好)的理解中,在C++

  • 在调用axis2 1.7.5(Wsdl2Java)生成的存根时,有人知道如何解决以下问题吗? 我发现存根发送了以下请求,但没有添加/定义SOAP版本(xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/)这是问题的根源 因此,我尝试如下设置SoapVersionURL 甚至可以直接将存根中的名称空间设置为 但是,这两种方法仍然忽略“xml

  • 我已在中声明了命名空间。d、 ts应在全球范围内提供,如下所示: 我想将此命名空间用于TSX文件中的接口: Types cript现在告诉我:。 我的tsconfig如下所示: