C++类模板继承之谜

标签 c++ templates compiler-errors

这段代码有什么问题? gcc 4.6.1 在 baz() 中提示“'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;
}

最佳答案

有什么问题,根据规范,我不知道,但您可以使用以下代码编译代码:

void baz() { Bar<N>::foo; }

关于C++类模板继承之谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7958258/

相关文章:

c++ - GLFW无法编译示例NetBeans Mingw W64

objective-c - 预期标识符 '('

c++ - 如何实现一个基于网络的图书查询系统

c++ - 使用可变参数模板在 C++ 中实现差异化

c++ - 为什么 std::void_t 在这种情况下不起作用?

c++ - 模板特化中的类型(数组类型的 unique_ptr)

asp.net - 在asp.Net中,在控制标签中写代码会产生编译错误

C++ 在 .txt 文件中查找整数值

c++ - 显示 Delphi 和 C++ 源代码

c++ - MPI_Barrier 和递归