Почему в GCC 4.4.1 я не могу объявить аргументы по умолчанию в шаблоне функции? - PullRequest
0 голосов
/ 03 ноября 2010
  1. Здесь: http://gcc.gnu.org/projects/cxx0x.html
    Они говорят, что аргументы dflt tmp в fnc поддерживаются их версией 4.4. Я запускаю версию 4.4.1, и когда я пытаюсь скомпилировать это:

d - угадай, для чего здесь этот d? ;)

 #include<vector>

    template<class Key, class CollT = std::vector>
    CollT* delete_(Key kValue)
    {
        return new CollT;
    }

    int main()
    {
        return 0;
    }

Я получаю ошибку. Так что же происходит?

Ответы [ 2 ]

3 голосов
/ 03 ноября 2010

std :: vector - это не класс, это шаблон.Вы можете ввести синтаксис, чтобы указать шаблон в качестве параметра шаблона.В вашем случае вы можете просто сделать это std::vector<Key>

0 голосов
/ 03 ноября 2010

Я думаю, что код, который вы показали, был неработоспособен: здесь исправление и способ сборки, и это работает на g ++ 4.4.5, поэтому дважды проверьте w / вашу версию:

#include<vector>
template <class Key, class CollT = std::vector<Key> >
CollT* delete_(Key kValue)
{
    return new CollT;
}

int main()
{
    return 0;
}

для сборки:

g ++ templdef.cpp -std = c ++ 0x

РЕДАКТИРОВАТЬ на основе комментариев:

   1) replace typename with class within template definition (both class CollT and typename CollT seems fine)
   2) replaced `vector<int>` with `vector<Key>`
   3) compiling without flag, will give you the following error: default template arguments may not be used in function templates without -std=c++0x or -std=gnu++0x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...