lemene
随笔 - 51, 文章 - 1, 评论 - 41, 引用 - 0
数据加载中……
vc2005无法编译通过《从集合中枚举子集》中的代码
前些日子整理代码,发现《从集合中枚举子集》中的代码无法在
VC2005
上编译通过。当时只在
DevC++
上编译,没有考虑
VC2005
与
gcc
的区别。仔细查找,问题出在
CSetIterAgent
的构造函数的参数上。下面是一段简化的代码,会出现同样的问题。
#include
<
vector
>
template
<
typename
Type
>
class CTest
{
public
:
enum Data
{
A,
B
};
public
:
CTest(
const
std::vector
<
Type
>&
set
, CTest::Data data
=
CTest::A){};
~CTest(){};
};
int
main(void)
{
std::vector
<
int
>
set
;
CTest
<
int
>
test(
set
);
CTest
<
int
>
::Data a
=
CTest
<
int
>
::A;
return
0
;
}
用vc2005编译出现的错误如下
1
>
d:
\
work
\
c
++\
vc
\
qt
\
qt
\
main.cpp(
12
) : warning C4346:
'
CTest<Type>::Data' : dependent name is not a type
1
>
prefix
with
'
typename' to indicate a type
1
>
d:
\
work
\
c
++\
vc
\
qt
\
qt
\
main.cpp(
14
) : see reference
to
class template instantiation
'
CTest<Type>' being compiled
1
>
d:
\
work
\
c
++\
vc
\
qt
\
qt
\
main.cpp(
12
) :
error
C2226: syntax
error
: unexpected type
'
std::vector<Type>'
1
>
d:
\
work
\
c
++\
vc
\
qt
\
qt
\
main.cpp(
12
) :
error
C2334: unexpected token(s) preceding
'
{'; skipping apparent function body
1
>
d:
\
work
\
c
++\
vc
\
qt
\
qt
\
main.cpp(
12
) : fatal
error
C1903: unable
to
recover from previous
error
(s); stopping compilation
1
>
d:
\
work
\
c
++\
vc
\
qt
\
qt
\
main.cpp(
19
) : see reference
to
class template instantiation
'
CTest<Type>' being compiled
1
>
with
1
>
[
1
>
Type
=
int
1
>
]
但在gcc下可以通过。如果把代码
CTest(
const
std::vector
<
Type
>&
set
, CTest::Data data
=
CTest::A){};
改为
CTest(
const
std::vector
<
Type
>&
set
, CTest
<
Type
>
::Data data
=
CTest
<
Type
>
::A){};
问题同样。如果改成下面形式
CTest(
const
std::vector
<
Type
>&
set
){};
则vc2005和gcc都可以通过。
有一句忘了出处的名言:“我知道万有引力是怎么工作的,但我不知道它为什么这样工作”。现在我也知道怎样写会有问题,但我不知道为什么会有这样的问题。希望能和大家多多交流,我的邮箱
lemene@sina.com
。
posted on 2007-11-09 16:54
lemene
阅读(358)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © lemene
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2007年11月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔档案
2017年12月 (1)
2016年10月 (2)
2016年4月 (7)
2016年1月 (1)
2015年12月 (1)
2015年11月 (2)
2015年9月 (1)
2015年8月 (2)
2015年3月 (1)
2015年1月 (1)
2014年12月 (3)
2014年6月 (2)
2014年5月 (2)
2012年8月 (1)
2011年12月 (1)
2011年6月 (1)
2011年1月 (1)
2010年8月 (1)
2009年8月 (1)
2009年5月 (1)
2008年6月 (1)
2008年5月 (1)
2008年3月 (4)
2008年1月 (5)
2007年12月 (1)
2007年11月 (4)
2007年10月 (1)
2007年9月 (1)
文章档案
2016年4月 (1)
搜索
最新随笔
1.
2. K近邻算法
3. title
4. CPPEXP —— 构造函数抛异常
5. CPPEXP —— 构造析构函数调用顺序
6. CPPEXP —— char[]和char*的区别
7. CPPEXP —— 字符串常量
8. CPPEXP —— 字节序(大小端)
9. CPPEXP —— 类成员初始化顺序
10. CPPEXP —— 空类的大小
最新评论
1. re: CPPEXP —— char[]和char*的区别
char[]和char*的区别 mark下
--linda
2. re: VS中运行控制台程序,界面不停留[未登录]
console.readkey();
--Darren
3. re: 智力题:5个强盗分100个金币
试一下不登陆可不可以评论
--xxoo
4. re: VS2010调试断点不起作用的解决方法[未登录]
刚都可以不知动了那里,就出现断点不能调试了。
编译都是正确的。问题出在那里呢。
--liu
5. re: 计算24点[未登录]
评论内容较长,点击标题查看
--lemene
阅读排行榜
1. title(13251)
2. (11516)
3. VS2005调试断点不起作用的解决方法(8087)
4. 智力题:5个强盗分100个金币(7169)
5. 猜数字的一种解法(5241)
评论排行榜
1. 智力题:5个强盗分100个金币(10)
2. VS2005调试断点不起作用的解决方法(10)
3. 拼图游戏(6)
4. 猜数字的一种解法(5)
5. 简易统计程序运行时间的程序(3)