Я столкнулся с кодом шаблона, который не компилируется, и я не уверен, что понимаю почему. Кажется, проблема связана с использованием внутреннего класса с определением метода вне строки. Ниже приведен простой пример:
template<typename T>
class Outer {
public:
struct Inner {
T a;
Inner(T _a) : a(_a) {}
};
int foo(T a);
};
template<typename T>
Inner Outer<T>::foo(T a) { //Line 43
Inner ret(a);
return ret;
}
int main(int argc, char *argv[]) {
Outer<int> out;
return 0;
}
g ++ 4.2.1 завершается с ошибкой: error: expected constructor, destructor, or type conversion before ‘Outer’
со ссылкой на строку 43, отмеченную выше. Код работает нормально, когда я перемещаю определение foo
в строку.
Я также пытался заменить Inner
на Outer<T>::Inner
в строке 43, но это не имело значения.
Есть мысли?