1

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

所以我去检查代码,它有如下几行,

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

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

4

5 回答 5

7

VTK_IO_EXPORT是一个预处理器宏。在 Windows 以外的所有平台上它都是空白的。

在 Windows 上,VTK_IO_EXPORT 定义__declspec( dllexport )__declspec( dllimport ),两者都是非标准的 Microsoft 扩展。

您收到错误并删除VTK_IO_EXPORT修复它的事实表明,出于某种原因,WIN32即使您是在 Linux 上构建,您也已经定义了。你需要弄清楚为什么会这样。

于 2013-01-25T19:52:26.970 回答
4

VTK_IO_EXPORT 是一个宏,可能是一个属性。您应该找到它的定义位置,这应该使事情更清楚(或者至少更容易用谷歌搜索)

于 2013-01-25T19:53:05.657 回答
3

全部大写的事实VTK_IO_EXPORT表明它是一个宏。通常,库会在该位置粘贴一个“导出”宏,以便在 Windows 上它们可以插入__declspec(dllexport)__declspec(dllimport)在该位置插入,以便在 Windows DLL 中导出它们的接口。

构建系统可能没有正确定义这个宏,所以你得到一个错误。您应该看到宏应该在哪里定义并向后追溯,直到您发现构建中的某些内容配置不正确。

于 2013-01-25T19:54:00.083 回答
1

显然VTK_IO_EXPORT是一个宏。由于它是一个宏,它可以是任何东西。它可以只是空白。

所以,你真的应该告诉我们这意味着什么。在代码中查找该宏的定义,看看它被替换为什么。

于 2013-01-25T19:53:30.880 回答
1

这是一个包含在宏中的 MSVC 扩展:

#if defined(vtkIO_EXPORTS)
 #define VTK_IO_EXPORT __declspec( dllexport ) 
#else
 #define VTK_IO_EXPORT __declspec( dllimport ) 
#endif

您可以通过使用上述定义或包含来解决它vtkWin32Header.h- 您将通过分发包获得它。

于 2013-01-25T19:53:54.530 回答