读书人

C++编程思想Stack:Link* p的异常

发布时间: 2013-08-01 15:23:18 作者: rapoo

C++编程思想Stack::Link* p的错误
template<class T>
class Stack
{
...
struct Link{...}*head;
public:
Stack::Link *p;
...
};
(C++编程思想P415 卷一)这一行在Visual Studio 2010下出错
warning C4346: 'Stack<T>::Link' : dependent name is not a type
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
这是光盘上的源代码...
但是去掉Stack::就会正确。
求原因 C++编程思想 迭代器 嵌套定义
[解决办法]
应该是缺少 typename 的问题
[解决办法]
不是typedef,是typename。
直接使用Link,编译器可以很容易的确定在当前作用域中寻找名称的定义
如果你没有申明模板的话,你的Stack::Link* p是绝对可以通过编译的,没有任何歧义
但是你这儿申明的是一个模板,这个时候按照编译器的一套规则(具体我忘了)是不能确定Stack<T>::Link是一个类型还是一个其他东西的。

读书人网 >C++

热点推荐