用VS2008编译泛型出错,vs2005却通过

sorryIdonotknow 2009-11-13 01:37:53
下面代码在VS2008出错,在VS2005却通过,对比过编译选项,两者差不多的

template<bool b>
class CTestTemplate
{
public:
struct STypeInClass{};

static STypeInClass* pp ;
};

template<bool b>
typename CTestTemplate<b>::STypeInClass* CTestTemplate<b>::pp = NULL ;

提示出错是这段代码: typename CTestTemplate<b>::STypeInClass* CTestTemplate<b>::pp = NULL ;
error C2143: syntax error : missing ';' before '*'
...全文
289 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fblgzdq 2009-11-13
  • 打赏
  • 举报
回复
是不是选的工程不一致?
sorryIdonotknow 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jackyjkchen 的回复:]
引用 5 楼 sorryidonotknow 的回复:
先前已试过去掉 typename 相同提示这个错误.

刚才试了一下,这段代码,在另一新VS2008工程里编译也通过了. 试了几个VS2008的工程都可以,就唯独现在做着的工程不行,假如把这段代码整段注释掉,编译又通过了真奇怪

模板在调用时才实例化,是不是调用的问题
[/Quote]

没实例过.

问题解决了.

这是编译SGI STL 时的报错,把 __STL_NEED_TYPENAME 关闭OK了, 而 __STL_NEED_TYPENAME 则把 typename 定义为空的

幸好 SGI 的代码还比较清晰,不然就麻烦了

// Microsoft compiler.
# if defined(_MSC_VER) && !defined(__ICL) && !defined(__MWERKS__)
# define __STL_NO_DRAND48
# define __STL_STATIC_CONST_INIT_BUG
//# define __STL_NEED_TYPENAME
# define __STL_NO_USING_CLAUSE_IN_CLASS
# define __STL_NO_FRIEND_TEMPLATE_CLASS
....

# ifdef __STL_NEED_TYPENAME
# define typename
# endif
jackyjkchen 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sorryidonotknow 的回复:]
先前已试过去掉 typename 相同提示这个错误.

刚才试了一下,这段代码,在另一新VS2008工程里编译也通过了. 试了几个VS2008的工程都可以,就唯独现在做着的工程不行,假如把这段代码整段注释掉,编译又通过了真奇怪
[/Quote]
模板在调用时才实例化,是不是调用的问题
sorryIdonotknow 2009-11-13
  • 打赏
  • 举报
回复
先前已试过去掉 typename 相同提示这个错误.

刚才试了一下,这段代码,在另一新VS2008工程里编译也通过了. 试了几个VS2008的工程都可以,就唯独现在做着的工程不行,假如把这段代码整段注释掉,编译又通过了真奇怪
jackyjkchen 2009-11-13
  • 打赏
  • 举报
回复
不知道楼主什么意思……
jackyjkchen 2009-11-13
  • 打赏
  • 举报
回复
编译通过,VS2008


#include <stdio.h>
#include <stdlib.h>
template <bool b>
class CTestTemplate
{
public:
struct STypeInClass{};

static STypeInClass* pp ;
};

template <bool b>
typename CTestTemplate <b>::STypeInClass* CTestTemplate <b>::pp = NULL ;

int main(int argc,char **argv)
{
CTestTemplate<true> a;
return 0;
}


yshuise 2009-11-13
  • 打赏
  • 举报
回复
STypeInClass* CTestTemplate <b>::pp = NULL ;
yshuise 2009-11-13
  • 打赏
  • 举报
回复
typename STypeInClass* CTestTemplate <b>::pp = NULL ;

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧