这段代码有什么问题? gcc 4.6.1抱怨“boo()中未在此范围内声明''foo'”。如果我转换代码以使其中一个模板只是一个常规类,那么问题就会消失。
struct Foo {
char foo;
};
template<int N>
struct Bar : public Foo
{
Bar() { foo; }
};
template<int N>
struct Baz : public Bar<N>
{
void baz() { foo; }
};
int main() {
Baz<10> f;
return 0;
}
答案 0 :(得分:1)
有什么问题,根据规范,我不知道,但您可以使用以下代码编译代码:
void baz() { Bar<N>::foo; }
答案 1 :(得分:1)
foo
是一个从属名称;也就是说,它取决于模板参数,因此在实例化模板之前,编译器不知道它是什么。您必须明确表明它是一个类成员,Bar<N>::foo
或this->foo
。
(你可能也想用它做一些事情;只是使用它作为表达式的忽略值根本不做任何事情。)