关于 typename 的用法

brave_heart 2003-05-16 04:20:24
下面的程序,编译通不过

#include <iostream>
using namespace std;

template <class T>
class MyClass
{
public:
typename T::SubType;// *ptr; // 注意这一行

SubType *ptr;
};

class Q
{
public:
typedef int SubType;
int x;
};

int main()
{
MyClass<Q> x;
x;
return 0;
}

如果这样写,就没有问题了,why???
template <class T>
class MyClass
{
public:
typename T::SubType *ptr; // 注意这一行

//SubType *ptr;
};
...全文
114 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
brave_heart 2003-05-17
  • 打赏
  • 举报
回复
这个问题我想明白了

typename T::SubType; // 这就是一个类型,跟int一样
你能在class里面直接这样写吗?
class AA {
int;
};
不能,所以只能
typename T::SubType *ptr;
meteor135 2003-05-17
  • 打赏
  • 举报
回复
以下是MSDN里的原话,怎么感觉跟楼上说的相左?
typename
C++ Specific —>

typename identifier;

Use this keyword only in template definitions. This keyword tells the compiler that an unknown identifier is a type. For example:

template<class T> class X {
typename T::Y; // treat Y as a type

Y m_y;
};
This keyword can also be used in place of class in template parameter lists. For example, the following statements are identical:

template<class T1, class T2>...
template<typename T1, typename T2>...
END C++ Specific
woshinzg 2003-05-16
  • 打赏
  • 举报
回复
typename T::SubType;// *ptr; // 注意这一行

SubType *ptr;// 这里的SubType 系统不认。。。不知道是哪儿来的看看 typename 格式


—————————————————————————————————
因为陌生,所以勇敢,因为距离,所以美丽。
QQ:6785267
Muf 2003-05-16
  • 打赏
  • 举报
回复
typename本来就不是这么用的。
请看typename的说明。
cxjddd 2003-05-16
  • 打赏
  • 举报
回复
template <class T>
class MyClass
{
public:
// typename T::SubType;// *ptr; // 注意这一行
typedef typename T::SubType SubType; // 这样呢?

SubType *ptr;
};
brave_heart 2003-05-16
  • 打赏
  • 举报
回复
以下是编译器的出错信息

error C2602: 'Q::SubType' is not a member of a base class of 'MyClass<class Q>'
zliang520 2003-05-16
  • 打赏
  • 举报
回复
问题提示是说不是基类的成员.
msdnl里面没有具体说明,按理说这样应该可以的

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧