【发布时间】:2011-01-11 23:41:33
【问题描述】:
我有以下类层次结构:
template <typename T>
class base
{
public:
void f() {}
};
class class_a : public base<class_a> {};
class class_b : public base<class_b>,
public class_a
{
using base<class_b>::f;
};
int main()
{
class_b b;
b.f();
return 0;
}
Comeu 和 Intel C++ v11 声称一切正常,但 GCC (4.4.1) 和 VC++ 2008 似乎抱怨 (http://codepad.org/KQPDsqSp),例如:
g++ -pedantic -Wall -o test test.cpp
test.cpp: In function ‘int main()’:
test.cpp:5: error: ‘void base<T>::f() [with T = class_b]’ is inaccessible
test.cpp:14: error: within this context
我相信代码的格式是正确的,但是我可能是错的,我希望 SO C++ 社区的人可以提供一些关于这个问题的见解。
注意: 在 class_b 的 using 指令前添加“public”,解决了 gcc 和 VS 的问题。应用 using 指令的类的访问器部分是否应该覆盖基类的派生模式(公共、私有)?
总之就是这样
- 编译器错误 - 如果是编译器 GCC、VS 或 Comeu、Intel
- 上面的代码格式正确吗?
- 调用 using 指令的访问器部分是否会覆盖基类的派生模式?
【问题讨论】:
标签: c++ templates compiler-errors crtp