2015-12-08 2 views
0

В VC++ 2015 у меня есть незапланированный класс, который должен иметь templated memberfunction, который возвращает карту.Объявление функции шаблона класса-члена, возвращающего карту

Вот немного кода:

class Registry 
{ 
    template<class configclass> 
    std::map<std::wstring, configclass> enumerateSubKeys(std::wstring subKeyName); 
} 

Но компилятор бросает сообщения об ошибках:
ошибка C2988: Непризнанные объявление шаблона/определение
ошибка C2143: синтаксическая ошибка: отсутствует ";" до «<»
ошибка C2238: неожиданный токен перед «;»
ошибка C2059: синтаксическая ошибка: «<»

Я предполагаю, что моя проблема заключается в том, чтобы использовать карту, где wstring должна быть установлена ​​/ untemplated но второй аргумент мой шаблонный класс.

Конечно, я следил за предложениями компиляторов, но это меня не заставило.

+0

Компиляция отлично, если я добавлю ';' в конце определения класса. Эти ошибки могут быть связаны с этим. – Kevin

+0

@Kevin Не будет компилироваться без использования определенных файлов заголовков. – juanchopanza

+0

Правда, возможно, я ошибочно предположил, что они были включены выше опубликованного кода. – Kevin

ответ

1

Вам необходимо указать #include <map> и добавить точку с запятой в конец объявления класса.

Как отмечают в комментариях @Kevin и @juanchopanza, вы просто пропускаете полуточку и потенциально включаете. При следующей программе в VS2013:

class Registry 
{ 
    template<class configclass> 
    std::map<std::wstring, configclass> enumerateSubKeys(std::wstring subKeyName); 
} 

int main() 
{ 
} 

Я получаю ассортимент ошибок вы перечислили:

error C2143 : syntax error : missing ';' before '<'
error C2238 : unexpected token(s) preceding ';'
error C2988 : unrecognizable template declaration/definition
error C2059 : syntax error : '<'

А также:

error C2039 : 'map' : is not a member of 'std'

После того, как я добавить включаемый для std::map, в ошибки:

#include <map> 

class Registry 
{ 
    template<class configclass> 
    std::map<std::wstring, configclass> enumerateSubKeys(std::wstring subKeyName); 
} 

error C2628 : 'Registry' followed by 'int' is illegal(did you forget a ';' ?)

Который предполагает, что в конце объявления класса отсутствует точка с запятой.

Смежные вопросы