虚拟方法的返回值

时间:2017-07-12 15:42:03

标签: c++ visual-studio gcc

我继承了一个在clang和GCC上完美构建的应用程序。现在,我试图在Windows上移植它。当我尝试使用visual studio 2010构建它时,我得到了错误,我尝试使用以下示例进行语境化。

考虑Interface类:

class Interface
{
public:

    virtual ~Interface(){}

    virtual void someMethod() = 0;
    virtual QVector<int >& getSomething(){}
};

其中someMethod为纯虚拟,getSomething为虚拟。

然后是两个派生类Derived

class Derived : public Interface
{
public:
    Derived(){ cout << "derived constructor";}

    ~Derived(){ cout << "derived destructor";}

    virtual void someMethod() override { cout << "derived someMethod";}

};

仅实现纯虚方法,DerivedB

class DerivedB : public Interface
{
public:
    DerivedB(){ cout << "derivedB constructor";}
    ~DerivedB(){ cout << "derivedB destructor";}
    virtual void someMethod() override { cout << "derivedB someMethod";}
    virtual QVector<int >& getSomething(){ return myComputedVector; }
};

它实现了纯虚方法和虚方法。

总结一下,我有一些实现getSomething()的类和所有实现someMethod()的类。

如果我尝试使用visual studio构建此代码,我会收到以下错误:

error C4716: 'Interface::getSomething' : must return a value

我理解编译器,但我不知道如何管理这种情况。 如果有人可以解释我或给我一个如何管理这个的简单例子,我真的很有帮助!!

1 个答案:

答案 0 :(得分:8)

功能

QVector<int>

需要返回对RefreshIndicator的引用。您通过此函数的实现提供的空函数体不会这样做。您有用的编译器会通知您。