【发布时间】:2015-02-22 13:27:16
【问题描述】:
这是我的课程。这只是
#include<iostream>
using namespace std;
class Base
{
public:
int var;
Base(int val) : var(val)
{}
void foo()
{
cout << "Class Base foo()" << endl;
}
};
class Derived_A : public Base
{
public:
Derived_A(int val) : Base(val)
{}
};
class Derived_B : public Base
{
public:
Derived_B(int val) : Base(val)
{}
};
class Derived_AB : public Derived_A, public Derived_B
{
public:
Derived_AB(int var1, int var2) : Derived_A(var1), Derived_B(var2)
{}
};
int main(int argc, char** argv)
{
Derived_AB ABDerObj(1,2);
ABDerObj.foo();
return 0;
}
这给了我一个编译器错误,说 foo 调用不明确。
函数 foo 不会在任何地方被覆盖。我知道 Base 类有两个实例,因为没有虚拟继承。所以有两个'var'变量。但我不明白为什么编译器在 foo 调用中有歧义。函数不是特定于实例的。它们是特定于类的。为什么编译器会报错?
我正在使用 Visual Studio 2013。
谢谢。
【问题讨论】:
-
这就是
virtual在当前标准中的继承。 -
“函数不是特定于实例的”——你错了,它们是。