您的位置:首页 > 其它

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都从工程移走)也不行,然而单独放在一个工程里就可以。还是觉得应该是有冲突,具体怎么冲突我也没细找下去了。如果有人知道的话,可以告诉我一下:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: