【问题标题】:Type 'uint32_t' could not be resolved类型“uint32_t”无法解析
【发布时间】:2016-09-24 19:25:29
【问题描述】:

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

在 opendnp 对象中,intellisense 不列出

__uint32_t 但是,确实可以解决。

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

在我的搜索中,我在“C/C++ Build --> Settings -> Tool Settings -> GCC C++ Compiler”下的“All options”中添加了-std=c++11,并且我还重建了项目索引并重新启动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 毫秒)

【问题讨论】:

  • "我在 Debian 8 上使用 gcc 编译器。"那是什么gcc版本?您可以通过gcc -v查看。
  • 这是导致编译错误还是只是 Eclipse UI 正在标记错误?
  • 试试std::uint32_t。在using namespace yyy; 的弹幕中可能有不止一个xxx::uint32_t,这使得名称模棱两可。
  • 尝试将#include //uint32_t 移动到第一行。 opendnp3 如何引用 uint32_t ?
  • 是时候解决问题了。如果#include &lt;iostream&gt; #include &lt;cstdint&gt; int main() { uint32_t test =0; std::cout &lt;&lt; test &lt;&lt; std::endl; } 没有重现问题,那么@BaummitAugen 可能是对的。

标签: c++ eclipse c++11 gcc eclipse-cdt


【解决方案1】:

我知道这个问题很老,但我觉得值得一提的是我遇到了这个确切的问题并且能够通过重建索引来解决它:右键单击项目,“索引”,“重建”。您说您已经重建了索引,但没有帮助;重要的是,我在将-std=c++11 添加到“CDT GCC 内置编译器设置”中指定的编译器的命令行后执行此操作,可以通过打开项目属性并转到“C/C++ 常规”、“预处理器”找到包括路径、宏等”、“提供者”选项卡。如果我理解正确,您不需要使用 GCC 版本 6+ 执行此操作,因为它默认为 C++14;我自己使用的是 GCC 5.4。

如果这没有帮助,调试问题的最佳途径可能是打开 cstdint 的声明(包含文件本身 - 所以,右键单击 #include 指令中的 cstdint,然后选择“ open declaration") - 这将向您显示包含的文件,如果它们被预处理器宏(#ifdef 等)排除,则部分显示为灰色。您可能会立即看到为什么 uint32_t 未被视为已定义。在我的例子中,__cplusplus 宏的值不合适,这导致我将-std=c++11 添加到上面提到的编译器命令行中 - 但是我仍然需要在问题出现之前重建索引完全解决。

【讨论】:

    【解决方案2】:

    尝试在 Project>Properties>Preprocessor Includes>Providers 中启用 CDT GCC Built-in Compiler Settings

    【讨论】:

    • 看起来它已经在那里了。在 GNU C++ 下,我看到 4 个条目,其中一个是 CDT GCC Built-in Compiler Settings [Shared]
    • 修复了我的问题。谢谢!
    【解决方案3】:

    添加-std=c++11后,执行以下操作:

    C/C++ 常规 -> 路径和符号 -> 符号 -> GNU C++

    点击左侧的Add,将__GXX_EXPERIMENTAL_CXX0X__(确保附加和前置两个下划线)粘贴到Name,并将Value留空。

    【讨论】:

      猜你喜欢
      • 2015-10-22
      • 2013-12-14
      • 1970-01-01
      • 2017-07-19
      • 2014-11-07
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多