oYinShuiSiYuan1234 2021-06-18 09:31 采纳率: 100%
浏览 22
已采纳

类模板的多重继承,为什么在调用基类构造函数时会出错?

#include<iostream>
using namespace std;
template<class T>
class Point
{
public:
	T x, y;
	Point(T a, T b) :x(a),y(b){}
};
template<class T>
class Square : public Point<T>
{
public:
	T a;
	Square(T a,T b,T aa):Point(a,b),a(aa) {}
};
template<class T>
class Circle :public Point<T>
{
public:
	T r;
	Circle(T a, T b, T aa) :Point(a, b), r(aa) {}
};
template<class T>
class Solve :public Square<T>, public Circle<T>
{
public:
	void solve()
	{
		const T dis = Square::a / 2 + Circle::r;
		const T dx = abs(Square::x - Circle::x);
		const T dy = abs(Square::y - Circle::y);
		if (dis < dx && dis < dy)
			cout << "hh";
		else
			cout << "qq";
	}
public:
	Solve(T x1,T y1,T x2,T y2,T a,T r) : Square(x1,y1,a), Circle(x2,y2,r) {}
};
int main()
{
	double x1, y1, x2, y2, a, r;
	cin >> x1 >> y1 >> x2 >> y2 >> a >> r;
	Solve<double> s(x1, y1, x2, y2, a, r);
	
}

Circle Square都是Point的派生类,Solve继承于Circle Square,在调用他们的构造函数出错,报错为非法成员初始化,请问是什么原因?

展开全部

  • 写回答

1条回答 默认 最新

  • oYinShuiSiYuan1234 2021-06-18 13:00
    关注

    当类被设置为类模板的以后,类名就变成了Square<T>,将上述代码中的Square替换即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部