oYinShuiSiYuan1234 2021-06-18 17: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 21:00
    关注

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

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

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么