无法解析类型"uint32_t"

Type 'uint32_t' could not be resolved

本文关键字:uint32 类型      更新时间:2023-10-16

我正在Eclipse(3.8.1)CDT中开发一个C++程序。我在 Debian 8 上使用 gcc 编译器。我还使用了用 C++ 编写的名为 opendnp3 的开源库,这需要uint32_t解析,因为它是几个方法调用和构造函数中的参数。

在 opendnp 对象中,智能感知没有列出

但是,__uint32_t确实解决了。

类型在<cstdint>中定义(<cstdint>解析得很好)。我可以打开声明,清楚地看到里面的'using ::uint32_t;'。

在我的搜索中,我-std=c++11添加到"C/C++ Build --> Settings -> Tool Settings -> GCC C++ Compiler"下的"所有选项"中,我还重建了项目索引并重新启动了 Eclipse,但它仍然没有解决。

以下是到目前为止的代码:编辑为一个简单的 HelloWorld 项目以帮助诊断问题

#include <iostream>
#include <cstdint> //has uint32_t defined
using namespace std;
int main() {
__uint32_t t = 0;  //resolves just fine
uint32_t i = 0; //Type could not be resolved
auto x = "123"; //C++ 11 working
cout << "Foo!" << endl; // prints Foo!
return 0;
}

尝试生成后的 CDT 控制台:

23:10:52 **** 增量构建配置调试项目 FOO **** 全部制作 make:为"所有人"无所事事。

23:10:52 构建完成(耗时 133 毫秒)

我知道这个问题很旧,但我觉得值得一提的是,我遇到了这个确切的问题,并且只需重建索引即可解决它:右键单击项目,"索引","重建"。你说你已经重建了索引,但它没有帮助;重要的是,我在将-std=c++11添加到"CDT GCC 内置编译器设置"中指定的编译器的命令行后执行此操作,可以通过打开项目属性并转到"C/C++ 常规"、"预处理器包括路径、宏等"、"提供程序"选项卡找到。如果我理解正确,您不需要使用 GCC 版本 6+ 执行此操作,因为它默认为 C++14;我自己正在使用GCC 5.4。

如果这没有帮助,调试问题的最佳途径可能是打开cstdint的声明(包含文件本身 - 因此,右键单击#include指令中的cstdint,然后选择"打开声明") - 这将显示包含的文件,如果通过预处理器宏(#ifdef等)排除了这些部分,则部分将灰显。您可以立即看到为什么uint32_t不被视为已定义。就我而言,__cplusplus宏的值不合适,这导致我如上所述向编译器命令行添加-std=c++11-但我仍然需要在问题完全解决之前重建索引。

尝试在Project>Properties>Preprocessor Include>Providers中启用CDT GCC内置编译器设置

添加-std=c++11后,执行以下操作:

C/C++ 通用 -> 路径和符号 -> 符号 -> GNU C++

单击左侧的Add并将__GXX_EXPERIMENTAL_CXX0X__(确保附加和预置两个下划线)粘贴到Name中,Value留空。