【发布时间】:2016-02-13 12:36:01
【问题描述】:
我有一个特定的问题,在下面的示例中进行了描述。我的问题是第 34 行(注释的行):为什么这行给我错误消息?
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;
}
【问题讨论】: