Спецификация по умолчанию вектора C++ пар строк как недопустимый параметр функции на gcc-4.1.2?
Это прекрасно вписывается как параметр в объявление функции на VS64 x64 (MSVC++ 2010), но не на RHEL5 (gcc 4.1.2):
const std::vector<std::pair<std::string, std::string> >& = std::vector<std::pair<std::string, std::string> >()
Вся функция, так как некоторые задали вопрос (с указанным параметром является третьим):
bool func(const std::string&, const std::vector<int>&, const std::vector<std::pair<std::string, std::string> >& =
std::vector<std::pair<std::string, std::string> >(), const std::vector<std::string>& = std::vector<std::string>(),
const std::vector<std::string>& = std::vector<std::string>(), const std::vector<double>& = std::vector<double>(),
const std::vector<double>& = std::vector<double>(), const std::vector<double>& = std::vector<double>(),
const std::vector<double>& = std::vector<double>(), const std::vector<double>& = std::vector<double>(),
const std::string& = "", const std::string& = "", const std::string& = "") const;
Ошибка, которую я получил на RHEL5 gcc-4.1.2:
line #: error: expected ',' or '...' before '>' token
line #: error: wrong number of template arguments (1, should be 2)
line #: error: template argument 1 is invalid
line #: error: template argument 2 is invalid
Обратите внимание, что это прекрасно компилируется на обеих платформах с заменой третьего параметра на:
std::vector<std::string>& = std::vector<std::string>()
Мой текущий обходной путь - использовать последнюю форму и немного изменить мою реализацию, чтобы учесть ее, и это делает работу в настоящее время. Но любые идеи, почему первоначальное использование не основано на RHEL5 gcc-4.1.2 и что было бы правильным, очень приветствуются. Спасибо.
2 ответа
Код правильный. То, что у вас есть, скорее всего, ошибка в GCC 4.1. Не древние версии GCC компилируют этот код просто отлично.
Кроме этого, убедитесь, что вы действительно включаете заголовки, которые вам нужны:
#include <vector>
#include <string>
#include <utility> // for std::pair
Я думаю, что вы не включили <vector>
,
В одном компиляторе он косвенно включается другим заголовком, поэтому объявление компилируется.
С другой стороны, он видел только декларацию std::vector
указав два параметра шаблона, а не полное определение, указав значение по умолчанию для второго; поэтому компилятор жалуется, что должен быть второй.
Убедитесь, что вы включаете это, а также <string>
а также <utility>
за std::string
а также std::pair
,