codeblocks工程下关于结构体的一个问题
2015-06-20 14:32
302 查看
我用codeblocks建了一个工程uscoj专门用于存放平时在学校oj上做的题----因为每道题都只需要一个.cpp文件,而单独为每个.cpp文件进行编译运行会产生很多中间文件(强迫症觉得乱七八糟的很难受),因此就专门建立一个工程进行管理。
工程目录如下:
我正在写的cpp文件就是gone_fishing2.cpp
里面有一个结构体:
struct FStruct{
public:
int i, f; //@
};
我用它的一个priority_queue<FStruct>对象pq存储结构体变量,并专门为它重载了'<'操作符,但在调用pq.top()时得到的总是先push的结构体对象。
重载的'<'操作:
static bool operator<( FStruct2 a, FStruct2 b ){
if( a.f== b.f ) return a.i> b.i;
return a.f< b.f;
}
push的过程:
FStruct2 fs,fs2,fs3;
fs.i = 2; fs.f = 10;
fs3.i = 3; fs3.f = 10;
fs2.i = 1; fs2.f = 10;
q.push(fs);
q.push(fs3);
q.push(fs2);
输出的代码:
while( !q.empty() ){
cout << q.top().f << ' ' << q.top().i << endl;
q.pop();
}
本应输出:
1, 10
2, 10
3, 10
实际输出:
2,, 10
3, 10
1, 10
经过各种查找,发现了两种解决方法:
1.把结构体定义的@处改为:int f,i;
2.把结构体名由FStruct改为FStruct2或Node
3.将cpp文件放到另外单独的工程中
具体原因最终我也没能弄清楚,我将uscoj工程里的FStruct结构体定义只保留一个文件test3(test3中有FStruct的定义,另外的gong_fishing和gong_fishing2都从工程移走)也不行,然而单独放在一个工程里就可以。还是觉得应该是有冲突,具体怎么冲突我也没细找下去了。如果有人知道的话,可以告诉我一下:)
工程目录如下:
我正在写的cpp文件就是gone_fishing2.cpp
里面有一个结构体:
struct FStruct{
public:
int i, f; //@
};
我用它的一个priority_queue<FStruct>对象pq存储结构体变量,并专门为它重载了'<'操作符,但在调用pq.top()时得到的总是先push的结构体对象。
重载的'<'操作:
static bool operator<( FStruct2 a, FStruct2 b ){
if( a.f== b.f ) return a.i> b.i;
return a.f< b.f;
}
push的过程:
FStruct2 fs,fs2,fs3;
fs.i = 2; fs.f = 10;
fs3.i = 3; fs3.f = 10;
fs2.i = 1; fs2.f = 10;
q.push(fs);
q.push(fs3);
q.push(fs2);
输出的代码:
while( !q.empty() ){
cout << q.top().f << ' ' << q.top().i << endl;
q.pop();
}
本应输出:
1, 10
2, 10
3, 10
实际输出:
2,, 10
3, 10
1, 10
经过各种查找,发现了两种解决方法:
1.把结构体定义的@处改为:int f,i;
2.把结构体名由FStruct改为FStruct2或Node
3.将cpp文件放到另外单独的工程中
具体原因最终我也没能弄清楚,我将uscoj工程里的FStruct结构体定义只保留一个文件test3(test3中有FStruct的定义,另外的gong_fishing和gong_fishing2都从工程移走)也不行,然而单独放在一个工程里就可以。还是觉得应该是有冲突,具体怎么冲突我也没细找下去了。如果有人知道的话,可以告诉我一下:)
相关文章推荐
- ffmpeg 从内存中读取数据(或将数据输出到内存)
- Linux字符设备驱动(一)
- java I/O 输入输出流详解
- excl筛选求和
- Tomcat启动报Error listenerStart错误
- Mac OS X 10.10.3对SSD开启Trim功能
- $('#checkbox').attr('checked'); 回报checked或undefined该解决方案
- Uva - 246 - 10-20-30
- STL算法
- Uva - 246 - 10-20-30
- 深入剖析Android音频之AudioTrack
- 联合人脸检测、校准算法介绍
- 字典树PKU 1204 Word Puzzles
- 写在JDBC前面的话
- BlenderPython (三)bpy模块
- STM32延时函数的三种方法——最好掌握第三种
- 黑马程序员——JAVA笔记——静态static
- python 输出中文
- ActiveMQ学习笔记(3)——ActiveMQ的安装
- Andorid-Volley(五)