我遇到了错误抱怨:error: expected initializer before ‘:’ token
所以我去检查代码,它有一些如下所示的行,
class VTK_IO_EXPORT vtkPFReader
:
public vtkMultiBlockDataSetAlgorithm
{blahblah...}
我想在定义class VTK_IO_EXPORT vtkPFReader
时知道,名字VTK_IO_EXPORT
是什么意思?我发现如果删除VTK_IO_EXPORT
,则不会发生错误,但会发生其他错误。我该怎么办?非常感谢
答案 0 :(得分:7)
VTK_IO_EXPORT
是预处理器宏。在Windows以外的所有平台上都是空白的。
在Windows上,VTK_IO_EXPORT
is defined为__declspec( dllexport )
或__declspec( dllimport )
,两者都是非标准的Microsoft扩展程序。
您收到错误并删除VTK_IO_EXPORT
修复错误的事实表明,即使您在Linux上构建,也会因某种原因定义WIN32
。你需要弄清楚为什么会这样。
答案 1 :(得分:4)
VTK_IO_EXPORT是一个宏,可能是属性。你应该找到它定义的地方,并且应该让事情更清晰(或者至少更容易谷歌)
答案 2 :(得分:3)
VTK_IO_EXPORT
全部上限的事实表明它是一个宏。通常情况下,图书馆会坚持“出口”。该位置的宏,以便在Windows上,他们可以在该位置插入__declspec(dllexport)
或__declspec(dllimport)
,以便在Windows DLL中导出其接口。
构建系统可能没有正确定义此宏,因此您会收到错误。您应该看到应该定义宏的位置并向后追踪,直到找到构建中的某些内容未正确配置为止。
答案 3 :(得分:1)
显然VTK_IO_EXPORT
是一个宏。因为它是一个宏,它可以是任何东西。它可以只是空白空间。
所以,你应该告诉我们这意味着什么。在代码中查找该宏的定义,看看它被替换为什么。
答案 4 :(得分:1)
这是一个包含在宏中的MSVC扩展:
#if defined(vtkIO_EXPORTS)
#define VTK_IO_EXPORT __declspec( dllexport )
#else
#define VTK_IO_EXPORT __declspec( dllimport )
#endif
您可以使用上面的定义或包含vtkWin32Header.h
来解决它 - 您将通过分发包获得它。