gpt4 book ai didi

c++ - GCC - 将宏用于函数属性时出现 "has initializer but incomplete type"错误

转载 作者:行者123 更新时间:2023-11-28 05:44:29 25 4
gpt4 key购买 nike

我有一些头文件,其中包含一些简单的美化 struct,其中只定义了纯虚方法。代码在带有 Visual Studio 2015 的 Windows 上编译良好,但 GCC 卡住了。一、代码:

代码 list


namespace CustomUtils
{
interface API_ABSTRACT overriden
{
virtual int GetStatus() const = 0;
};
}

在导入的头文件中,interface 只是定义为一个stuct:

#define interface struct

API_ABSTRACT 只是一个毫无用处的宏:

#define API_ABSTRACT

interface typedef 是我无法控制的继承代码的一部分,并且 API_ABSTRACT 已就位,因此我可以将 define custom attributes 输入Windows 和 Linux 限制我导出的 API 函数。虽然这是在 VS2015 中构建的,但在 Linux 上,出现构建错误:


error: variable 'API_ABSTRACT CustomUtils::overridden' has initializer but incomplete type

如果我改变行:

interface API_ABSTRACT overriden

我认为它被翻译成:

struct overriden

代码将在 Linux 中正常编译。我已经尝试使用 gcc -E -dD 进行编译,将“预处理”后的源代码呈现到屏幕上以查看 typedef#define 替换,但它似乎只显示 .cpp 文件的输出,而不显示 header (.h) 文件。

问题

为什么在尝试使用 GCC 编译时此代码不起作用?

谢谢。


编辑 #1


gcc -E 的输出显示有问题的行是:

struct API_ABSTRACT overriden

所以罪魁祸首似乎是 API_ABSTRACT 宏,它的计算结果为空。

最佳答案

API_ABSTRACT 未在任何地方定义(不包含相应的文件)。检查它的方法是通过 tell-tale gcc -E:

struct API_ABSTRACT overriden

使用 -E,gcc 将显示预处理的输出,并且 API_ABSTRACT 清晰可见意味着预处理器对此一无所知。

当 C++ 编译器看到此构造(struct API_ABSTRACT overridden)时,它认为(根据语法并且如果您授予编译器认知)overriden 是类型的变量API_抽象。接着是大括号,它将构造转换为所述变量的初始化。然而,类型 API_ABSTRACT 从未被定义,因此编译器提示初始化了一个不完整类型的变量。

关于c++ - GCC - 将宏用于函数属性时出现 "has initializer but incomplete type"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36485824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com