命名一个类的空格?

时间:2017-03-09 21:52:35

标签: c++ wxwidgets

当我看到这段代码时,我浏览了wxWidgets的来源

class WXDLLIMPEXP_FWD_CORE wxKeyEvent;

在此之后,他们定义了一个类似

的类
class WXDLLIMPEXP_FWD_CORE wxKeyEvent : public wxEvent{
//some code
};

正如你所看到的那样,有一个空格,但在命名类时你不能拥有它,我进一步编写了这个编译成功的小代码`

#include <bits/stdc++.h>

using namespace std;

class a
{
public:
    int x;  
};

class a b
{
    // it fails if i add anything there
};

int main()
{
    return 0;
}

当我在class a b中添加一些东西时,这无法编译。你能告诉我发生了什么事吗?

谢谢!

2 个答案:

答案 0 :(得分:6)

WXDLLIMPEXP_FWD_CORE是一个宏,应该添加(编译器特定的)类属性,并扩展为__declspec(dllexport)__declspec(dllimport),具体取决于用于导出或导入类。

您的示例class a b { /* ... */ };只是无效的语法,

类名不能包含空格。

答案 1 :(得分:1)

对于宏定义,已接受的答案是正确的,但对于&#34;无效语法&#34;也会产生误导。

如果您的编译器支持uniform initialization

class a b { /* ... */ };实际上有效的语法。在您提供的代码中,它会导致使用默认构造函数在全局命名空间中构造名为a的{​​{1}}类型的变量。在这种情况下,b关键字的作用类似于class,即使没有它,代码也应该编译。

当您尝试在括号内定义变量时,它会停止编译,因为统一初始化语法需要放置构造函数调用参数。