为什么我不能访问继承的函数?

时间:2018-12-04 09:53:25

标签: c++ templates inheritance

我有以下代码:

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())可使代码正常工作。我在这里想念什么?

0 个答案:

没有答案