在模板(非成员)函数中使用模板类中的 typedef
以下内容无法编译(无论如何,在 Linux 上使用 gcc 4.2.1):
template< typename T >
class Foo
{
public:
typedef int FooType;
};
void
ordinary()
{
Foo< int >::FooType bar = 0;
}
template< typename T >
void
templated()
{
Foo< T >::FooType bar = T( 0 );
}
int main( int argc, char **argv )
{
return 0;
}
问题出在这一行:
Foo< T >::FooType bar = 0;
...并且编译器提出了这样的抱怨:
foo.c:在函数“void templated()”中:
foo.c:22:错误:预期为“;”在“栏”之前
通常,当类型尚未声明时,人们会看到这一点,但据我所知, Foo<; T >::FooType 在 templated() 内应该完全有效。
The following fails to compile (with gcc 4.2.1 on Linux, anyway):
template< typename T >
class Foo
{
public:
typedef int FooType;
};
void
ordinary()
{
Foo< int >::FooType bar = 0;
}
template< typename T >
void
templated()
{
Foo< T >::FooType bar = T( 0 );
}
int main( int argc, char **argv )
{
return 0;
}
The problem is with this line:
Foo< T >::FooType bar = 0;
...and the compiler makes this complaint:
foo.c: In function ‘void templated()’:
foo.c:22: error: expected `;' before ‘bar’
Normally one sees this when a type hasn't been declared, but as far as I can tell, Foo< T >::FooType should be perfectly valid inside templated().
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用
typename
:请参阅此了解 typename 的原因需要。
use
typename
:See this for why typename is needed.