ISO C++ 禁止声明没有类型的“myStruct”

Posted

技术标签:

【中文标题】ISO C++ 禁止声明没有类型的“myStruct”【英文标题】:ISO C++ forbids declaration of 'myStruct' with no type 【发布时间】:2014-12-29 07:02:32 【问题描述】:

这是我的代码 DeviceClass.cpp:

...
#include "myHeader.h"

class DeviceClass : public DeviceClassBase 
private:
myClass::myStruct Foo;

Foo.one = 1;
Foo.two = 2;

myClass myclass(Foo);
...
;

这是来自 myHeader.h 文件的 myClass:

class myClass : baseClass
public:
struct myStruct 
myStruct():
one(0),
two(0)
int one;
int two;
;
myClass(const myStruct &mystruct);
;

但这编译失败。 我收到此错误:

: error: ISO C++ forbids declaration of 'myStruct' with no type
: error: expected ';' before '.' token
: error: 'myStruct' is not a type
: In member function 'virtual void DeviceClass::Init()':
: error: '((DeviceClass*)this)->DeviceClass::myclass' does not have class type

我哪里出错了?

我只能编辑 DeviceClass.cpp 文件。

【问题讨论】:

看起来不像是有效的 C++。在类声明中间赋值给实例变量??? 看起来您正在接近 C++,只需输入代码并查看会发生什么。这是使用这种语言可能犯的最严重的错误;由于某些原因,C++ 根本无法通过实验来学习(无论您多么聪明),您需要先阅读手册。从***.com/q/388242/320726 挑选一本好书并从头到尾阅读。如果您这样做,您的未来将非常感激。 为什么不先从your previous question解决问题? 【参考方案1】:

语句在类级别无效,它们仅在函数或方法内部有效。也许您打算改为编写一个默认构造函数。这有点复杂,因为myClass 没有默认构造函数(显式声明的复制构造函数抑制了隐式默认构造函数),因此您需要在初始化列表中构造它。您需要一个 static 工厂函数来创建所需的 myStruct 参数以及您想要的值。

class DeviceClass : public DeviceClassBase

public:
    DeviceClass();

private:
    static myClass::myStruct create_myStruct();

    myClass myclass;
;

myClass::myStruct DeviceClass::create_myStruct()

    myClass::myStruct Foo;

    Foo.one = 1;
    Foo.two = 2;

    return Foo;


DeviceClass::DeviceClass() : myclass(create_myStruct())  

【讨论】:

以上是关于ISO C++ 禁止声明没有类型的“myStruct”的主要内容,如果未能解决你的问题,请参考以下文章

如何调试“ISO C++ 禁止声明没有类型的‘汽车’”?

错误:ISO C++ 禁止声明没有类型的“对象”

错误帮助:ISO C++ 禁止声明没有类型的“向量”

ISO C++ 禁止指针和整数之间的比较 [-fpermissive]| [c++]

ISO C++禁止指针和整数之间的比较?

ISO C++ 禁止可变大小数组(编译错误)