c++成员函数中static变量
我最近在做郭炜老师的编程题目,这道题我实现的过程中出现了一些蛋疼的错误,进行一个记录.
源代码
|
样例输入
首先我通过宏控制程序编译出三个版本all.out
,blue.out
,red.out
,其中all.out
是全部输出,另外两个是单独输出红色或者蓝色.
样例输入: 1
20
3 4 5 6 7Case:1
000 red iceman 1 born with strength 5,1 iceman in red headquarter
000 blue lion 1 born with strength 6,1 lion in blue headquarter
001 red lion 2 born with strength 6,1 lion in red headquarter
001 blue dragon 2 born with strength 3,1 dragon in blue headquarter
002 red wolf 3 born with strength 7,1 wolf in red headquarter
002 blue ninja 3 born with strength 4,1 ninja in blue headquarter
003 red headquarter stops making warriors
003 blue iceman 4 born with strength 5,1 iceman in blue headquarter
004 blue headquarter stops making warriors
测试
测试红色
➜ exam cat test.txt | ./red.out |
测试蓝色
➜ exam cat test.txt | ./blue.out |
测试全部
➜ exam cat test.txt | ./all.out |
定位问题
从上面的结果可以看出,单独输出一组没有问题,但是两组一起输出就会出现问题.本来应该是 两个对象单独输出,互不影响,但是现在red对象输出后,blue对象输出就出现了问题.因此我 在代码中加入log语句.
测试红色
➜ exam cat test.txt | ./red.out |
测试两组
➜ exam cat test.txt | ./all.out |
终于看出问题了,应该是我在函数中使用的static auto index= seqcycle.begin();
,这个静态的index
是两个类所共有的,每次对index
进行循环操作index= index == seqcycle.end() ? seqcycle.begin() : index + 1;
,其中的seqcycle.begin()
却是每个类独有的,就导致了每次
公共的index
加1,两次同时操作就导致了index
最终超出了seqcycle
的范围,出现了数组越界.
解决方案
现在只能在类中定义一个私有变量index
来对数据进行定位.