std :: namespace необходимо указать для одного типа, но не для другого в файле cpp - PullRequest
0 голосов
/ 19 декабря 2018

В моем файле 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 Ответ

0 голосов
/ 19 декабря 2018

Возможны два объяснения:

1002 Где-то в заголовке using std::vector Где-то в заголовке #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;

...