【问题标题】:I'm getting error: Missing ; before *, but I'm not missing it我收到错误:缺少; *之前,但我没有错过它
【发布时间】:2014-09-30 16:50:20
【问题描述】:

我已将所有内容注释掉,现在代码如下所示。

//AOBSClass.h

#ifndef __AOBSCLASSHDR__
#define __AOBSCLASSHDR__

#include "IDriver.h"
#include "ActuationClass.h"

namespace AOBS
{
    class AOBSClass
    {
    public:
        AOBSClass(IDriver *driver);
        ~AOBSClass();

        IDriver *drivers;

        ActuationClass act;     

    private:

    };
}

#endif



// ActuationClass.h

#ifndef __ACTUATIONCLASSHDR__
#define __ACTUATIONCLASSHDR__

#include "AOBSClass.h"

namespace AOBS
{
    class ActuationClass
    {
    public:

        ActuationClass();
        ~ActuationClass();

        AOBSClass *aobs; // This line here

    private:

    };
}
#endif

我在上面显示的行中不断收到以下错误。我不知道是什么原因造成的。

error C2143: syntax error : missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

我正在使用 Visual Studio Express 2013。

【问题讨论】:

  • __ 开头的标识符保留供实现使用。
  • 循环包括意味着你没有正确地将你的逻辑分成两个类。您不需要这样做。
  • @stark:这可能意味着;或者它可能只是意味着您包含了一个不需要的标题,就像这里的情况一样。

标签: c++ visual-c++


【解决方案1】:

这两个文件相互包含!随便放

class AOBSClass;

在 ActuationClass.h 的开头。

【讨论】:

  • 并删除#include "AOBSClass.h"
【解决方案2】:

你有一个循环依赖。 ActuationClass.h 包括 AOBClass.h,反之亦然。

要解决此问题,请删除ActuationClass.h 中的#include "AOBClass.h",然后转发声明AOBSClass

namespace AOBS
{
    class AOBSClass;      // Forward declare
    class ActuationClass
    {
    public:

        ActuationClass();
        ~ActuationClass();

        AOBSClass *aobs;

    private:

    };
}

【讨论】:

    【解决方案3】:

    您有循环包含。两个头文件相互包含。一般来说,包含应该是一种方式,比如树结构。

    A 包括 B 包括 C 等等

    另外,正如其他人所指出的:前向声明可以帮助解决这类事情

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 2022-08-24
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多