【问题标题】:make_heap and pop_heap are OK but push_heap notmake_heap 和 pop_heap 可以,但 push_heap 不行
【发布时间】:2020-11-07 20:46:57
【问题描述】:

我刚刚遇到了一个奇怪的问题,它只发生在带有 Clion 的 MSVC 上,而不发生在其他编译器上(我在 Linux 和 Visual Studio 上尝试了 gcc,都没有这样的问题,使用相同的代码)。

使用这些代码:

#include <vector>
#include <algorithm>
using namespace std;
int main() {
    vector<int>v = {1,2,3,4,5};
    make_heap(v.begin(), v.end());
    v.push_back(6);
    push_heap(v.begin(), v.end());
}

一个错误“在函数模板特化 'std::push_heapstd::_Vector_iterator<:_vector_val> > >'的实例化中没有类型名为 'value_type' 在 'std::indirectly_readable_traitsstd::然后会显示 _Vector_iterator<:_vector_val> > >'"

是 Clion 还是 MSVC 的 bug?

附: 我仍然可以构建和运行它,所以它可能不是编译器错误; (让我更加困惑)

【问题讨论】:

  • 这是一个实际的编译器错误吗?或者这仅仅是 Intellisense 中的一个错误或正在使用的任何技术?
  • @PaulMcKenzie Clion 使用 MS 的智能感知进行后端内联解析?有趣的;我不知道。
  • @PaulMcKenzie 我仍然可以构建和运行它,所以它可能不是编译器错误,尽管它似乎是
  • 当然你仍然可以构建它,因为它不是编译器错误。错误出在第三方工具中,而不是编译器中。您需要区分哪些是实际的编译器错误,哪些是第三方工具错误。这个问题表明这是一个编译器错误,而它肯定不是(因为您能够构建程序)。

标签: c++ visual-studio c++11 heap clion


【解决方案1】:

您似乎无法使用以下命令初始化向量:

vector<int>v = {1,2,3,4,5}; 

改成:

vector<int> vect{ 1, 2, 3, 4, 5 };

编译运行代码,看看是否还有问题。

编辑: 有人说不太可能,但是请查看链接: What is the easiest way to initialize a std::vector with hardcoded elements?

如果你向下滚动到第二个答案,它会说:

If your compiler supports C++11, you can simply do:
std::vector<int> v = {1, 2, 3, 4};

由于您没有告诉我们您的编译器版本和环境,因此很难确定这是否是问题所在。另请注意:

This is available in GCC as of version 4.4. 
Unfortunately, VC++ 2010 seems to be lagging behind in this respect.

因此,如果您使用的是旧版本的 VC++,那么您就不走运了...

【讨论】:

  • 这似乎不太可能
  • @YunfeiChen 您应该首先考虑该错误是否是实际的编译器错误,而不是IDE的代码解析器错误。程序员永远不应该更改代码以匹配有缺陷的 IDE 的建议。
  • @PaulMcKenzie 我做了它也不适用于我的 VSC,所以它看起来像: std::vector v = {1, 2, 3, 4};语法不正确。
  • 不,我的意思是错误是否是实际的编译器错误。 MSVC 编译器错误命名为Cxxx。如果是 Intellisense 错误,则不是编译器错误,而是 Intellisense 中的错误。
  • Intellisense 是在 Visual Studio IDE 中使用的技术,用于查找类、类型等,并为缺失的类型等添加下划线或识别缺失的类型等。但它不是编译器。如果您查看问题,则没有提到该错误是实际的编译器错误。 Visual Studio 编译器错误以C 开头并编号。这就是为什么建议更改代码以使 IDE 工具满意是错误的(坏的)建议。
猜你喜欢
  • 2012-01-09
  • 2011-02-18
  • 2015-09-01
  • 2014-12-17
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
相关资源
最近更新 更多