2017-02-19 23 views
-4

我有一个基类,有许多虚拟的方法在不同的子类中实现,如所以:如何解决“警告:没有返回语句函数返回非void [-Wreturn-type]”空虚拟方法

//base class (has no attribute A or B) 
virtual double getAttributeA(){} //implemented in subclass A 
virtual int getAttributeB(){} // implemented in subclass B 

我需要空函数,因为我需要调用基类指针的子类函数。

这个编译好,但我得到了一个警告,因为我显然定义了返回类型(子类需要的),但不返回任何东西。

如何解决此警告?

谢谢!

+6

返回的东西。 – juanchopanza

+0

为什么使用大括号? – user2357112

+2

这些方法是否应该由一些子类来实现,而不是全部?这似乎是一个有问题的设计。 – user2357112

回答

0

我需要空函数,因为我需要调用基类指针的子类函数。

如果你声明为纯虚函数,而不是如他们不需要为空:

virtual double getAttributeA() = 0; 
virtual int getAttributeB() = 0; 

这意味着基类本身并不需要在所有的实现,但派生类必须实现他们。

我得到一个警告,因为我显然定义了返回类型(子类需要的),但不返回任何东西。

如果声明一个非空返回类型,则必须返回的东西:

virtual double getAttributeA() { return 0.0; } 
virtual int getAttributeB() { return 0; } 
+0

感谢您的输入!我已经尝试过你的第一个解决方案,但是它不能编译,因为我需要在** all **子类中实现函数。并不是所有的子类都具有相同的属性。尽管我可能会返回0。 – hsvar

+0

@hsvar属性不适用于所有不属于基类的子类。 –