我正在 Eclipse (3.8.1) CDT 中开发 C++ 程序。我在 Debian 8 上使用 gcc 编译器。我还使用一个用 C++ 编写的名为 opendnp3 的开源库,它需要uint32_t来解析,因为它是多个方法调用和构造函数中的参数。
在 opendnp 对象中,intellisense 未列出
__uint32_t
然而,确实解决了。
该类型定义于<cstdint>
(<cstdint>
解决得很好)。我可以打开声明并清楚地看到'using ::uint32_t;
' 在那里。
在我的搜索中,我添加了-std=c++11
到“C/C++ Build --> Settings -> Tool Settings -> GCC C++ Compiler”下的“All options”,我还重建了项目索引并重新启动了 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
(包含文件本身 - 所以,右键单击cstdint
内#include
指令,然后选择“打开声明”) - 这将显示包含的文件,如果通过预处理器宏排除了这些部分,则这些部分将显示为灰色(#ifdef
等)。您可能会立即明白原因uint32_t
不被视为已定义。就我而言,__cplusplus
宏有一个不合适的值,这导致我添加-std=c++11
如上所述到编译器命令行 -but在问题完全解决之前我仍然需要重建索引。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)