我是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
为什么?
答案 0 :(得分:7)
这是一个错误,因为根本不是任何声明。
编译器需要知道您是否需要class
,struct
,enum
,union
或其他内容。 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
来说明其他内容。