我试图建立在HP-UX 11.11这个合法的C++代码,使用HP C/aC++编译版本A.03.85:HP-UX C/aC++编译错误使用,语句纯虚方法
class BaseClass
{
public:
virtual int sum(int i) = 0;
};
class Derived : public BaseClass
{
public:
using BaseClass::sum;
virtual int sum(int i1, int i2) = 0;
};
class Impl : public Derived
{
public:
virtual int sum(int i) { return i+1; }
virtual int sum(int i1, int i2) { return i1+i2; }
};
int main()
{
Derived * obj = new Impl;
obj->sum(5);
delete obj;
}
然而,它失败,出现以下编译错误:
Error 181: "test_using.cpp", line 26 # Expected 2 argument(s) for "int Derived::sum(int,int)"; had 1 instead.
obj->sum(5);
^^^^^^^^^^^
我能够准确地建立在其他平台,如Linux,AIX和Windows相同的代码没有任何问题。 HP的问题似乎与纯虚拟方法有关,因为如果我从“BaseClass”中删除“= 0”片段,则所有内容都按预期工作。
所以,我的问题是:你们有没有遇到过类似的问题?你是如何解决它的?这是一个知道aC++的错误?
请注意,我不能将纯粹的虚拟方法变成常规方法。
无关您的问题,但你需要一个虚拟的析构函数。 – ildjarn 2012-03-14 21:59:26
'#ifdef USING_HP_BUGWARE obj-> sum(5,0); #else obj-> sum(5); #endif' – JimR 2012-03-14 23:06:08
@JimR你可能是指'obj-> sum(5,1)':) – 2012-03-15 00:37:34