我正在使用Eclipse(3.8.1)CDT中的C ++程序。我在Debian 8上使用gcc编译器。我还使用了一个用C ++编写的名为opendnp3的开源库,需要 uint32_t 来解决它在多个方法调用中的参数和建设者。
在opendnp对象中,intellisense不列出
然而, __uint32_t
已解决。
类型在<cstdint>
中定义(<cstdint>
解析得很好)。我可以打开声明并清楚地看到&#39; using ::uint32_t;
&#39;在那里。
在我的搜索中,我已将-std=c++11
添加到所有选项&#39;在&#39; C / C ++ Build下 - &gt;设置 - &gt;工具设置 - &gt; GCC C ++编译器&#39;我还重建了项目索引并重新启动了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:没有什么可以做的&#39;所有&#39;。
23:10:52构建完成(耗时133毫秒)
答案 0 :(得分:4)
我知道这个问题已经过时了,但我觉得值得一提的是我遇到了这个问题并且能够解决它只是重建索引:右键单击项目,“索引”,“重建”。你说你重建了索引并没有帮助;重要的是,我在将-std=c++11
添加到“CDT GCC内置编译器设置”中指定的编译器的命令行后执行了此操作,可以通过打开项目属性并转到“C / C ++ General”找到, “预处理器包括路径,宏等”,“提供程序”选项卡。如果我理解正确,你不会需要使用GCC版本6+,因为它默认为C ++ 14;我自己正在使用GCC 5.4。
如果这没有帮助,调试问题的最佳途径可能是打开cstdint
的声明(包含文件本身 - 所以,右键单击cstdint
中的#include
}指令,并选择“打开声明”) - 这将显示包含的文件,如果通过预处理器宏(#ifdef
等)排除它们,则部分将显示为灰色。您可能会立即看到为什么uint32_t
不被视为已定义。在我的例子中,__cplusplus
宏有一个不合适的值,这导致我将-std=c++11
添加到编译器命令行,如上所述 - 但是我仍然需要重建索引在问题完全解决之前。
答案 1 :(得分:2)
尝试在Project&gt; Properties&gt; Preprocessor Includes&gt; Providers中启用 CDT GCC内置编译器设置。
答案 2 :(得分:0)
添加-std=c++11
后,请执行以下操作:
C/C++ General -> Paths and Symbols -> Symbols -> GNU C++.
点击Add
并粘贴 GXX_EXPERIMENTAL_CXX0X (确保附加并添加两个下划线)到Name
并将Value
留空。