我有一個特定的問題,這在下面的例子中描述。我的問題是行號34(註釋之一):爲什麼這行給我錯誤信息?C++ 11已實現的接口方法不可用。爲什麼?
test.cpp: In function ‘int main()’:
test.cpp:34:13: error: no matching function for call to ‘C::func(int)’
c.func(33); // Line 34
^
test.cpp:23:24: note: candidate: virtual void C::func(int, int)
public : virtual void func(int x, int y) override
^
test.cpp:23:24: note: candidate expects 2 arguments, 1 provided
C類擴展了B類,B類實現了方法func(int)。但爲什麼不提供這種方法?如果我將C投給A,爲什麼可以使用?
#include <cstdio>
class A
{
public : virtual void func(int x) = 0;
};
class B : public A
{
public : virtual void func(int x, int y) = 0;
public : virtual void func(int x) override
{
func(x, 0);
}
};
class C : public B
{
public : virtual void func(int x, int y) override
{
printf("x: %d y:%d\n", x, y);
}
};
int main()
{
C c;
c.func(4, 6);
c.func(33); // Line 34
A* a = &c;
a -> func(33);
return 0;
}