我有以下代码:
namespace a
{
struct S
{
int a;
int b;
int c;
};
template<typename T>
class A
{
public:
void execute()
{
this->execute(this->t);
};
void add(T t)
{
this->t = t;
};
protected:
virtual void execute(T t) = 0;
private:
T t;
};
class B : public A<S>
{
protected:
virtual void execute(S t) override
{
t.c = t.a + t.b;
}
};
}
int main(int argc, char* argv[])
{
auto b = a::B();
b.add(a::S{ 1,2,3 });
b.execute();
}
使用VS2017 15.9进行编译时,出现以下错误:
错误C2660:'a :: B :: execute':函数未使用0个参数
为什么我不能从类a :: A访问公共函数execute()?以不同的方式调用受保护的函数(例如executeI())可使代码正常工作。我在这里想念什么?