无法解析类型uint32_t&

2022-07-18 00:00:00 gcc c++ eclipse c++11 eclipse-cdt

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

在opendnp对象中,IntelliSense未列出

__uint32_t但是,确实可以解析。

该类型在<cstdint>中定义(<cstdint>可以很好地解析)。我可以打开声明并清楚地看到其中的"using ::uint32_t;"。

在我的搜索中,我已经将-std=c++11添加到‘C/C++Build-->设置->工具设置->GCC C++编译器’下的‘所有选项’中,我也重建了项目索引并重新启动了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:不能为‘All’做任何事情。

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添加到编译器命令行--但在问题完全解决之前,我仍然需要重新生成索引。

相关文章