为什么这段程序在 VC6.0 没问题, 在 VC7.1 不过???

qin0036 2003-08-24 01:05:22

为什么这段程序在 VC6.0 没问题, 在 VC7.1 不过???

下面这段程序为什么在 VC6.0 下面编译可以通过, 在 VC 7.1
下面就无法通过?
编译的输出为:

warning C4346: “qtClass1<qT1>::qtClass1<qT1>::qT2::qjT1” : 依赖名称不是类型
error C2146: 语法错误 : 缺少“;”(在标识符“qjT1”的前面)
error C2501: “qtClass1<qT1>::qjT1” : 缺少存储类或类型说明符

源代码:
class CObject
{
};

template <class TCallback>
class qtBase
{
public:
typedef TCallback qjT1;

protected:
CObject* m_target;
// a callback
qjT1 m_cb;

};


class qtClass : public qtBase<void (CObject::*)()>
{
public:
int a;
};


template <class qT1>
class qtClass1
{
public:
typedef qT1 qT2;
typedef qT2::qjT1 qjT1;

};

void main()
{
qtClass1<qtClass> qttt;

}
...全文
49 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
delphihero 2003-08-24
  • 打赏
  • 举报
回复
typedef typename qT2::qjT1 qjT1;
delphihero 2003-08-24
  • 打赏
  • 举报
回复
typedef qT2::qjT1 qjT1; 修改为
typedef typename T2::qjT1 qjT11;
如果依赖名称将被视为一个类型,则 typename 关键字是必需的。这是在 Visual C++ .NET 2003 编译器中进行的重大更改,以便符合 ISO C++ 标准。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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