无法解析类型uint32_t&;
我正在使用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
添加到编译器命令行--但在问题完全解决之前,我仍然需要重新生成索引。
相关文章