Следующий заголовок работает с комментировал часть, как и ожидалось, когда я вызываю функцию биту без аргументов:По умолчанию аргументы контейнера
class Test
{
public:
void bat(std::vector<int> k = std::vector<int>()) {}
//void cat(std::map<int, std::vector<int> > k = std::map<int, std::vector<int> >()) {}
};
Но когда я пытаюсь с помощью функции кота в заголовке:
class Test
{
public:
void bat(std::vector<int> k = std::vector<int>()) {}
void cat(std::map<int, std::vector<int> > k = std::map<int, std::vector<int> >()) {}
};
я получаю:
test.h:14: error: expected ',' or '...' before '>' token
test.h:14: error: wrong number of template arguments (1, should be 4)
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h:92: error: provided for 'template<class _Key, class _Tp, class _Compare,\
class _Alloc> class std::map'
test.h:14: error: default argument missing for parameter 2 of 'void Test::cat(std::map<int, std::vector<int, std::allocator<int> >, std::less<int>, std::all\
ocator<std::pair<const int, std::vector<int, std::allocator<int> > > > >, std::vector<int, std::allocator<int> >)'
Каким образом? И есть ли простые способы обхода? надеюсь, не требуя изменения типа указателя в интерфейсе?
Это мой полный заголовок:
#ifndef TEST_H
#define TEST_H
#include <map>
#include <vector>
#include <sstream>
#include <iostream>
class Test
{
public:
//void bat(std::vector<int> k = std::vector<int>()) {}
void cat(std::map<int, std::vector<int> > k = std::map<int, std::vector<int> >()) {}
};
#endif
так все права включает в себя есть. Моя версия GCC ужасно устарела (ну не дома, я тоже стараюсь ее дома), но на работе это 4.1.2
Пахнет GCC ошибка - [терпит неудачу с 4.3.4] (http://ideone.com/alZRI), [работает с 4.5.1] (http://ideone.com/6Ppze). Какую версию ты используешь? – ildjarn
Это компилируется, вы включили '
Сообщение об ошибке будет указывать на 4.1.2 с включенным '