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

时间:2018-12-18 23:37:43

标签: c++ c++14

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

NewsExtendedController.php

use Roquin\RoqNewsevent\Controller\EventController;

class NewsExtendedController extends EventController

public function nextEventListAction(array $overwriteDemand = NULL)

我收到以下编译时错误:

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

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

1 个答案:

答案 0 :(得分:2)

两种可能的解释是-

  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,否则不会这样,用#define vector std::vector替换using std::vector;