如何使用带模板的结构和类

2024-01-15

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

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;
}

我有以下错误:

错误 C2143:语法错误:丢失 ';'前 '*'

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 没有 支持默认int

是否可以在类中使用结构体?如果我在类之外声明该结构,则模板看不到该模板T.


$9.2/2- 关键是下面来自 C++ Standard03 的引用

`在类说明符的结尾 } 处,类被视为完全定义的对象类型 (3.9)(或完整类型)。在类成员规范中,类在函数体、默认参数和构造函数初始化器(包括嵌套类中的此类内容)中被视为完整。否则,它在其自己的类成员规范中被视为不完整。

不知道是什么UINT16,但以下应该有效

template<class T> 
class CClass 
{ 
private: 
    typedef struct { 
        T *mValue; 
        T *next; 
        T *previous; 
        short int index;                      // Replacing with int for illustration only
    } SValue; 
public:
    SValue* getNewSValue(void); 
private: 
}; 

编辑3:***来到那里试图做出大胆的改变(无论如何我都应该删除)

template<class T> typename CClass<T>::SValue* CClass<T>::getNewSValue(void) 
{ 
    return new SValue; 
}

int main(){
    CClass<int> s;
    s.getNewSValue();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用带模板的结构和类 的相关文章

随机推荐