我正在 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++ 构建 –> 设置 -> 工具设置 -> 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 的配置调试的增量构建 **** 全部制作:“全部”无需执行任何操作。
23:10:52 构建完成(耗时 133 毫秒)
原文由 ErikJL 发布,翻译遵循 CC BY-SA 4.0 许可协议
我知道这个问题很老,但我觉得值得一提的是我遇到了这个确切的问题并且能够通过重建索引来解决它:右键单击项目,“索引”,“重建”。您说您已经重建了索引,但没有帮助;重要的是,我在将
-std=c++11
添加到“CDT GCC 内置编译器设置”中指定的编译器的命令行后执行此操作,可以通过打开项目属性并转到“C/C++ 常规”找到”, “预处理器包括路径、宏等”, “提供程序” 选项卡。如果我理解正确,您不需要使用 GCC 版本 6+ 执行此操作,因为它默认为 C++14;我自己使用的是 GCC 5.4。如果这没有帮助,调试问题的最佳途径可能是打开
cstdint
的声明(包含文件本身 - 所以,右键单击 --- 中的cstdint
#include
指令,然后选择“打开声明”) - 这将向您显示包含的文件,如果它们被预处理器宏(#ifdef
等)排除,则部分将显示为灰色。您可能会立即看到为什么uint32_t
未被视为已定义。就我而言,__cplusplus
宏的值不合适,这导致我将-std=c++11
添加到编译器命令行中,如上所述 - 但 我仍然需要在出现问题之前重建索引得到了彻底解决。