繁体   English   中英

std ::需要在cpp文件中为一种类型而不是其他类型指定名称空间

[英]std:: namespace needs to be specified for one type but not another in the cpp file

我的C ++文件中有如下代码行:

  vector<pair<vector<Block>, vector<string>>> groupedRequests;

我收到以下编译时错误:

error: no template named 'pair'; did you mean 'std::pair'?
  vector<pair<vector<Block>, vector<string>>> groupedRequests;
         ^~~~
         std::pair
third-party-buck/gcc-5-glibc-2.23/build/boost/5c6f7a9/include/boost/container/detail/std_fwd.hpp:36:8: note: 'std::pair' declared here
struct pair;
       ^
1 error generated.

我没有在类中使用命名空间std,但是很可能在我包含的头文件之一中使用了它。 我不明白的是为什么它需要std :: pair,而不需要std :: vector。 如果我更改为std :: pair或使用命名空间std指定,则代码可以编译并正常运行。 有任何想法吗?

两种可能的解释是-

  1. 标头中某处using std::vector
  2. 标头中某处有#define vector std::vector

显然,在没有看到所有标头的情况下,并不是一种真正的方法来辨别任何一个标头是否导致它,但是任何一个标头都可以复制所描述的行为,即

#include <vector>
#define vector std::vector

int main() {
  vector<int> v;
}

编译在哪里

#include <vector>
#include <utility>

#define vector std::vector

int main() {
  vector<pair<int, int>> v;
}

除非指定了std::pair ,否则using std::vector;替换#define vector std::vectorusing std::vector;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM