这就是我所尝试的(函数“fun”必须是静态的):
#include<iostream>
class A
{
public:
static void fun(double x) { std::cout << "double" << std::endl; }
};
class B
{
public:
static void fun(int y) { std::cout << "int" << std::endl; }
};
class C
:
public A,
public B
{
};
int main(int argc, const char *argv[])
{
double x = 1;
int y = 1;
C::fun(x);
C::fun(y);
return 0;
}
并使用g ++(GCC)4.8.1 20130725(预发行版),我收到以下错误:
main.cpp: In function 'int main(int, const char**)':
main.cpp:27:5: error: reference to 'fun' is ambiguous
C::fun(x);
^
main.cpp:12:21: note: candidates are: static void B::fun(int)
static void fun(int y) { std::cout << "int" << std::endl; }
^
main.cpp:6:21: note: static void A::fun(double)
static void fun(double x) { std::cout << "double" << std::endl;
所以我的问题是:如果我可以覆盖member functions,而不是静态函数,那怎么用C ++?为什么在这种情况下不会超载?我希望编译器将“fun”带入命名空间C ::然后进行名称修改并使用重载来区分C :: fun(int)和C :: fun(double)。
答案 0 :(得分:3)
您需要自己将它们纳入范围:
class C
:
public A,
public B
{
public:
using A::fun;
using B::fun;
};
答案 1 :(得分:1)
您需要的是class C
的定义:
public:
using A::fun;
using B::fun;
答案 2 :(得分:1)
目前尚不清楚要调用哪种fun()
方法,因此您必须指定所需的方法:
int main(int argc, const char *argv[])
{
double x = 1;
int y = 1;
A::fun(x);
B::fun(y);
return 0;
}