c – 为什么此类声明不适用于Visual Studio

前端之家收集整理的这篇文章主要介绍了c – 为什么此类声明不适用于Visual Studio前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我试图获得一些为 gcc编写的代码,以便在Visual Studio 2008上编译.我有一个问题,我已经缩小到这个:
class value_t
{
public:
  typedef std::deque<value_t>         sequence_t;
  typedef sequence_t::iterator        iterator;
};

代码失败:

1>cpptest.cpp
1>c:\program files\microsoft visual studio 9.0\vc\include\deque(518) : error C2027: use of undefined type 'value_t'
1>        c:\temp\cpptest\cpptest.cpp(10) : see declaration of 'value_t'
1>        c:\temp\cpptest\cpptest.cpp(13) : see reference to class template instantiation 'std::deque<_Ty>' being compiled
1>        with
1>        [
1>            _Ty=value_t
1>        ]
1>c:\program files\microsoft visual studio 9.0\vc\include\deque(518) : error C2027: use of undefined type 'value_t'
1>        c:\temp\cpptest\cpptest.cpp(10) : see declaration of 'value_t'

但是当我用std :: vector尝试这个时,编译很好:

class value_t
{
public:
  typedef std::vector<value_t>        sequence_t;
  typedef sequence_t::iterator        iterator;
};

怎么了?我试过在我能想到的任何地方添加’typename’,但此时此刻我认为它只是Dinkumware STL中的一个错误.谁能解释发生了什么,和/或提供解决方案?谢谢.

解决方法

它未定义的行为.请参阅c.l.c .moderated上的 this链接

来自Daniel K的回答: –

the C++ standard (both C++03 and
C++0x) says that what you are trying
causes undefined behavIoUr,see
[lib.res.on.functions]/2:

“In particular,the effects are undefined in the following cases: [..] — if an incomplete type (3.9) is used as a template argument when instantiating a template component.”

猜你在找的C&C++相关文章