Как вектор <T>разрешается как параметр функции для шаблонной функции? - PullRequest
1 голос
/ 05 сентября 2011

У меня есть вспомогательная функция, которая создает Array_Ref объект.У функции есть параметр vector<t> - на который жалуется компилятор.Я использую VS2010.

  • Я поместил функцию в .h сам по себе.
  • Я поместил функцию в Array_Ref.h
  • Я положил еев файле .cpp.
  • Я положил typename в front of vector<T>
  • Я поставил typedef typename перед vector<T>

Ничего не кажетсяна работу.


#include <vector>
template<class T>
Array_Ref<T> make_ref(vector<T> &v, int s)
{
    return (v.size()) ? Array_Ref<T>(v,s): Array_Ref<T>(0,0);
}

Я получаю:

error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed.
error C2988: unrecognizable template declaration/definition
error C2059: syntax error : '<'

Однако, поместив это в тот же заголовочный файл, что и Array_Ref.h, работает просто отлично:1033 *

template<class T,int size>
Array_Ref<T> make_ref(T (&p)[size])
{
    return (p) ? Array_Ref<T>(p,size): Array_Ref<T>(0,0);
}

Ответы [ 2 ]

6 голосов
/ 05 сентября 2011

Это std::vector, а не vector.Кроме того, вы, похоже, нигде не определили Array_Ref.

3 голосов
/ 05 сентября 2011

Возможно, пространство имен std отсутствует? Измените vector на std::vector (избегайте использования директив пространства имен в заголовочных файлах).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...