gpt4 book ai didi

c++ - 从模板化基类覆盖方法时出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:20 24 4
gpt4 key购买 nike

在派生自基模板类的类中,我覆盖了一个方法 createType()。当我尝试访问派生类的 createType(int) 时,编译器说它不存在。为什么?

template <class T>
class BaseClass
{
public:
virtual T createType(){ return T(); }
virtual T createType(int){ return T(); }
};

class Point
{
public:
float x, y;
};

class PointFactory : public BaseClass<Point>
{
public:
virtual Point createType() { return BaseClass::createType(); }
};

int main()
{
PointFactory pf;
auto p = pf.createType(5); // error here
return 0;
}

我得到的错误是

error C2660: 'PointFactory::createType' : function does not take 1 arguments

最佳答案

virtual Point PointFactory::createType()隐藏基本重载。

您可以添加 using BaseClass<Point>::createType;解决这个问题:

class PointFactory : public BaseClass<Point>
{
public:
using BaseClass<Point>::createType; // unhide overloads

Point createType() override { return BaseClass::createType(); }
};

关于c++ - 从模板化基类覆盖方法时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36315450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com