简单的C ++模板定义问题

时间:2010-10-29 04:59:52

标签: c++ templates

我是C ++的新手。这是代码:

template <class T> typename lw_slist {
    // .... some code
    private:     

        typedef struct _slist_cell {
            _slist_cell *next;
            T data;
        } slist_cell;

        lw_slist::slist_cell *root;
};

提供此编译错误:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

为什么?

2 个答案:

答案 0 :(得分:7)

这是一个错误,因为根本不是任何声明。

编译器需要知道您是否需要classstructenumunion或其他内容。 typename不是在那里使用的正确关键字。

可能正在寻找:

template<class T>
struct lw_slist {
};

答案 1 :(得分:1)

一个全新的问题,一个全新的答案:

我认为你会想要这样:

template <class T>
class lw_slist {
    // .... some code
    private:     
        struct slist_cell {
            slist_cell *next;
            T data;
        };

        slist_cell *root;
};

没有理由使用typedef:C ++使类和结构自动成为命名空间的一部分。

没有理由使用lw_slist :: slist_cell,因为slist_cell已经在当前命名空间中。

您收到错误dependent name is not a type的原因是在模板声明中C ++无法判断lw_slist<T>::slist_cell是应该是类型还是变量。它假设一个名为slist_cell的变量,您必须使用typename来说明其他内容。