类型引用
template
class Foo
{
typedef T::SomeType SomeType.
}. |
这段代码在VC 中一点问题也没有,但是GCC并不允许,因为它不知道T::SomeType是什么。你需要改为:
template
class Foo
{
typedef typename T::SomeType SomeType.
}. |
通过typename T::SomeType告诉GCC,SomeType是一个类型名,而不是其他东西。
当然,这种情况不只是出现在typedef中。例如:
template
void visit(const Container&. cont)
{
for (Container::const_iterator it = cont.begin(). it != cont.end(). it)
...
} |
这里的Container::const_iterator同样需要改为typename Container::const_iterator。
基类成员引用
template
class Foo : public Base
{
public:
void foo() {
base_func().
m_base_member = 0.
}
}. |
这段代码在VC 中同样没有问题,但是GCC中不能通过。因为GCC并不知道base_func,m_base_member是什么。对于这个问题,你可以有两种改法:
改法1:加上域作用符Base::
template
class Foo : public Base
{
public:
void foo() {
Base::base_func().
Base::m_base_member = 0.
}
}. |
相关文章
金山W Office实用自动化技巧四则
金山W Office文档编辑实用技巧五则
三个优化操作让W 文档结构图更好用
W 演示2005轻松插Flash课件变生动
从VC 到GCC移植:谈两者语法差异
基于OpenGL的三维曲面数据场动态显示
基于HOOK和MMF的Windows密码渗透技术
新设想——VC开发多语言界面支持的新招
理解MFC控制条窗口布局原理之一
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛