我继承了一个在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
我理解编译器,但我不知道如何管理这种情况。 如果有人可以解释我或给我一个如何管理这个的简单例子,我真的很有帮助!!
答案 0 :(得分:8)
功能
QVector<int>
需要返回对RefreshIndicator
的引用。您通过此函数的实现提供的空函数体不会这样做。您有用的编译器会通知您。