语法错误

qyxqyxqyx 2013-07-12 11:53:47
编译不通过
// wtl_test1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class D1;
class D2;

template<class T>
class B1
{
public:
void SayHi(){
T* pT = static_cast<T*>(this);
pT->PrintClassName();
}
protected:
void PrintClassName() {
cout << "This is B1";
}
};

class D1 : public B1<D1>{};

class D2 : public B1<D2>
{
protected:
void PrintClassName(){
cout << "This is D2";
}
};

int _tmain(int argc, _TCHAR* argv[])
{
D1 d1;
D2 d2;

d1.SayHi();
d2.SayHi();

return 0;
}

...全文
118 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qyxqyxqyx 2013-07-12
  • 打赏
  • 举报
回复


class D2 : public B1<D2>
{
public:
	template<class T>
	friend class B1;

protected:
	void PrintClassName()
	{
		cout<<"This is class D2\n";
	}
};
自己改了。谢谢楼上的。
橡木疙瘩 2013-07-12
  • 打赏
  • 举报
回复
B1<D2>这个实例中,B1::SayHi调用了D2::PrintClassName,而这个成员是protected的,所以编译失败。 改为:
class D2 : public B1<D2>
{
public:
	void PrintClassName(){
		cout << "This is D2"; 
	}
};
class D2 : public B1<D2>
{
protected:
        friend class B1<D2>;
	void PrintClassName(){
		cout << "This is D2"; 
	}
};
其实用虚函数来实现这个功能更方便合理。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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