Я упростил свой код, с которым столкнулся с проблемой. Я хочу сделать все реализации членов-функций вне определения класса / структуры. Это все работает, но если у меня есть функция-член, которая возвращает указатель на вложенный объект структуры, это не работает. Я думаю, что код ниже показывает проблему.
template <class T>
class MyClass
{
private:
struct InnerStruct;
InnerStruct* inStruct;
public:
MyClass(const T* val);
const InnerStruct* GetInnerStruct(); //this works if implemented in class definition, not implemented outside
void DoSomethingWithInnerStruct(); //this works in both ways (implemented here or outside).
};
template <class T>
struct MyClass<T>::InnerStruct
{
T* a;
};
template <class T>
MyClass<T>::MyClass(const T* val)
{
inStruct = new InnerStruct();
inStruct->a = val;
}
template <class T>
const MyClass<T>::InnerStruct* MyClass<T>::GetInnerStruct() //Heres the Problem!! Syntaxerror: identifier 'InnerStruct'.
//This works just fine if i write implemention in class definition.
{
return this->inStruct;
}
template <class T>
void MyClass<T>::DoSomethingWithInnerStruct() //this works just fine
{
// ...
}