Я ищу создать нетипизированный шаблонный класс с переменными-членами, которые зависят от нетипичного параметра (в частности, собственных матриц фиксированной размерности, но проблема присутствует с int
также). Чтобы сделать вещи более понятными, я определял типы членов, что работало замечательно, пока я не хотел, чтобы функция члена вернуть typedef, когда я начал получать следующую ошибку:
myClass.cpp: 10: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед «myClass»
Я понимаю, по крайней мере, концептуально, что это как-то связано с тем фактом, что мой typedef зависит от шаблона и что в результате C ++ запутался. Проблема в том, что я еще больше запутался, я попробовал несколько наивных вставок typename
, но это ничего не исправило.
Минимальный рабочий пример.
Заголовок:
template <int i> class myClass
{
public:
typedef int myVector_t;
myClass();
myVector_t myFunc();
};
Исходный код:
#include <myClass.hpp>
template <int i>
myClass<i>::myClass()
{
//blah
}
template <int i>
myClass<i>::myVector_t myClass<i>::myFunc() //<----- Line 10
{
//blah
}
Буду признателен за понимание.
Как объясняется ниже, решение должно включать typename
Ключевое слово в реализации, но не декларация.
typename myClass<i>::myVector_t myClass<i>::myFunc() //<----- Line 10
Обобщил вопрос от Эйгена
Поскольку имя myVector_t
в определении функции эффективно зависит от параметра шаблона, вы должны сообщить компилятору, что это тип с typename
:
template <int i>
typename myClass<i>::myVector_t myClass<i>::myFunc() //<----- Line 10
{
//blah
}
Других решений пока нет …