如何使用带有类的模板

oka*_*ami 5 c++ templates struct

使用此代码(只是一类测试):

typedef unsigned short UInt16;

template<class T>
class CClass
{
public:
    SValue* getNewSValue(void);
private:
    typedef struct {
        T *mValue;
        T *next;
        T *previous;
        UInt16 index;
    } SValue;
};

template<typename T>
SValue* CClass<T>::getNewSValue(void)
{
    return new SValue;
}
Run Code Online (Sandbox Code Playgroud)

我有以下错误:

错误C2143:语法错误:缺少';' 在'*'之前

错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持default-int

是否可以在类中使用Struct?如果我从类中声明结构,则模板不会看到模板T.

Ced*_* H. 0

struct当您声明 的返回类型时,您似乎没有定义getNewSValue

这样你就不会出现这个错误:

template<class T>
class CClass
{
public:
    SValue* getNewSValue(void);
private:
    typedef struct {
        T *mValue;
        T *next;
        T *previous;
        UInt16 index;
    } SValue;
};

template<typename T>
SValue* CClass<T>::getNewSValue(void)
{
  return new SValue;
}
Run Code Online (Sandbox Code Playgroud)

而且您还必须限定SValue返回类型,因为CClass当您使用它来定义getNewSValue.