“A类B”是什么意思?

时间:2013-01-25 19:50:35

标签: c++

我遇到了错误抱怨:error: expected initializer before ‘:’ token

所以我去检查代码,它有一些如下所示的行,

class VTK_IO_EXPORT vtkPFReader
:
    public vtkMultiBlockDataSetAlgorithm
{blahblah...}

我想在定义class VTK_IO_EXPORT vtkPFReader时知道,名字VTK_IO_EXPORT是什么意思?我发现如果删除VTK_IO_EXPORT,则不会发生错误,但会发生其他错误。我该怎么办?非常感谢

5 个答案:

答案 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来解决它 - 您将通过分发包获得它。

相关问题