为什么这段代码不能在VS2010中编译?
struct Base
{
void foo0() { }
};
template<typename BASE> struct Derived : BASE
{
void foo1() { foo0(); }
};
int main()
{
Derived<Base> ddd;
ddd.foo1();
return 0;
}
它在其他编译器中编译得很好。如果我借助于此函数调用foo0,它也会编译:this-&gt; foo0();
答案 0 :(得分:1)
我刚才发现这种行为背后的原因是Language Extensions编译器选项(/ Za)。因此,如果禁用语言扩展,则上述代码将无法编译。这里有什么奇怪的,这必须是C ++语言的一部分,而不是MS语言扩展。
希望这有助于某人...
答案 1 :(得分:1)
在声明Derived<BASE>::foo1()
时,它不知道BASE
是什么。然后它试图找出foo0
是什么。视图中没有foo0
- 或者更糟糕的是,它会找到要调用的全局foo0
。这是一个错误。
当您改为调用this->foo0()
时,通知编译器您希望将其作为方法找到。