gpt4 book ai didi

c++ - STL 错误_没有_代码中的任何 STL

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:37 28 4
gpt4 key购买 nike

我在 cygwin 上使用 gcc 3.4.4。我在下面的代码中收到了这个相当令人费解的 STL 错误消息,它根本不使用 STL:

#include <iostream>


using namespace std;

const int N = 100;

bool s[N + 1];
bool p[N + 1];
bool t[N + 1];

void find(const bool a[], bool b[], bool c[]){
return;
}


int main(){
find(s, p, t);
return 0;
}

当我编译时 g++ 堆栈.cc

我收到以下错误消息:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h: In function `_RandomAccessIterator std::find(_RandomAccessIterator, _RandomAccessIterator, const _Tp&, std::random_access_iterator_tag) [with _RandomAccessIterator = bool*, _Tp = bool[101]]':
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h:314: instantiated from `_InputIterator std::find(_InputIterator, _InputIterator, const _Tp&) [with _InputIterator = bool*, _Tp = bool[101]]'
stack.cc:18: instantiated from here
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h:207: error: ISO C++ forbids comparison between pointer and integer
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h:211: error: ISO C++ forbids comparison between pointer and integer
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h:215: error: ISO C++ forbids comparison between pointer and integer
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h:219: error: ISO C++ forbids comparison between pointer and integer
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h:227: error: ISO C++ forbids comparison between pointer and integer
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h:231: error: ISO C++ forbids comparison between pointer and integer
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h:235: error: ISO C++ forbids comparison between pointer and integer

如您所见,代码根本没有使用任何 STL,所以这很奇怪。另外,如果我删除行,错误就会消失

using namespace std;

这暗示了一些 namespace 冲突。如果我从函数 find 的定义中删除 const 关键字,它也会消失。

另一方面,如果我将 find 设为一个 2 参数函数,则错误消失了(这相当令人惊讶),如下所示:

#include <iostream>


using namespace std;

const int N = 100;

bool s[N + 1];
bool p[N + 1];
bool t[N + 1];

void find(const bool a[], bool b[]){
return;
}


int main(){
find(s, p);
return 0;
}

我无法想象 find 可以是两个参数函数而不是三个参数函数的原因是什么。

所以这里简单总结一下三种消除错误的方法:

  1. 删除 using namespace std; 行。

  2. find 的定义中删除 const 关键字。

  3. 删除函数 find 的第三个参数。

我想不出任何合乎逻辑的原因为什么首先会发生这样的错误,以及为什么它应该被删除我使用上述任何看似完全不相关的步骤。这是记录在案的 g++ 错误吗?我试着搜索它,但老实说我不知道​​要搜索什么,而且我尝试的几个关键字(“没有使用 STL 的 STL 错误”)没有出现任何东西。

最佳答案

你只是发生了碰撞,因为你无意中拉了std::find当你做 using namespace std; 时(它有 3 个参数)进入全局命名空间.无论出于何种原因,您的 <iostream>#include -ing <algorithm> ,或其内部实现的一部分(特别是 bits/stl_algo.h )。

我无法解释为什么删除 const让它消失;也许它会影响编译器解析重载的顺序。

关于c++ - STL 错误_没有_代码中的任何 STL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10904103/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com