在模板(非成员)函数中使用模板类中的 typedef

发布于 2024-08-24 19:13:00 字数 643 浏览 10 评论 0原文

以下内容无法编译(无论如何,在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

机场等船 2024-08-31 19:13:00

使用 typename

  typename Foo< T >::FooType bar = 0;

请参阅了解 typename 的原因需要。

use typename:

  typename Foo< T >::FooType bar = 0;

See this for why typename is needed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文