命名一个类的空白?
问题描述:
我是通过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;
}
这编译失败时,我里面添加东西CL屁股你能告诉我发生了什么事吗?
谢谢!
答
WXDLLIMPEXP_FWD_CORE
是应该添加(编译器特定的)类属性并扩展到__declspec(dllexport)
或__declspec(dllimport)
的宏,具体取决于用于导出还是导入类。
您例如class a b { /* ... */ };
简直是无效的语法,
类名不能包含空格。
答
对于宏定义,接受的答案是正确的,但对“无效语法”也有误导。
class a b { /* ... */ };
实际上是如果您的编译器支持uniform initialization,则为有效语法。在您提供的代码中,它会导致使用默认构造函数在全局名称空间中构造名为b
的类型为a
的变量。在这种情况下,class
关键字的作用就像typename
,即使没有它,代码也应该编译。
当您尝试定义括号内的变量时,它停止编译,因为这是统一初始化语法需要放置构造函数调用参数的地方。
'WXDLLIMPEXP_FWD_CORE'是一个宏。我想它变成了空白,所以它真的不是名称的一部分 – NathanOliver
@Nathan没有真正扩展到空白。 –
@πάνταῥεῖ如果这些东西是窗口相关的,那么你知道他们如何处理gtk,osx相关事件? – PrashantKumarNirmal