gpt4 book ai didi

c++ - 函数未解析为基类重载

转载 作者:行者123 更新时间:2023-11-30 00:49:25 24 4
gpt4 key购买 nike

我尝试在这个(简化的)示例中使用 CRTP:

基类:

template <class Derived>
class Base
{
public:
int method(int in, int& out2)
{
return derived().method(in, out2);
}

int method(int in)
{
int dummy;
return this->predict(in, dummy);
}

protected:
Base() {}
private:
Derived& derived()
{
return *static_cast<Derived*>(this);
}
};

派生类:

class Derived : public Base<Derived>
{
public:
int method(int in, int& out2)
{
// Logic here
}
};

问题是,当我尝试使用 method(int in) 时使用 Derived 的实例类,例如:

Derived d;
int res = d.method(5);

编译器(在本例中为 icc,但也尝试过使用 msvc)给出了以下错误:

error #165: too few arguments in function call

编译器似乎没有意识到存在一个只接受一个参数的重载,来自 Base<Derived>类(Derived 公开继承,所以我认为它应该是可访问的)。

我不确定我在这里遗漏了什么,任何提示都将不胜感激。

最佳答案

Derived::method 的存在意味着编译器在尝试绑定(bind)调用时不会考虑 Base::method 的重载。要解决此问题,请将 using Base::method; 添加到派生类中:

class Derived : public Base<Derived>
{
public:
using Base::method;
int method(int in, int& out2)
{
// Logic here
}
};

关于c++ - 函数未解析为基类重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28183050/

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