【发布时间】:2012-03-12 10:23:23
【问题描述】:
我在尝试在 QT 中实现棋盘游戏时遇到了一个非常奇怪的错误。这是我第二次遇到同样的问题,现在我想是时候在这里问了。
我仍然在游戏的逻辑部分,其中有一个名为 Field 的类和一个名为 Board 的类。 Board 类有一个QVector < Field* > fields 属性,它是Field 指针的向量。这就是问题所在。我有一个函数应该用新字段上传这个向量。这是我的来源,很简单:
void Board::addFields()
{
for(int i = 0; i<size; i++) //the board's size is size x size
{
for(int j = 0; j<size; j++)
{
Field * f = new Field();
fields.push_back(f);
//qDebug()<<i*size+j<<" "<<f;
}
}
//qDebug()<<fields.size();
}
在我遇到大量奇怪的错误之后,我决定将元素的实际数量、实际元素的引用以及两个循环之后向量的大小写入控制台。
结果很奇怪,我没有出错,但有时它会添加我所有的元素,有时它会停在随机数量的元素上,并且向量的大小甚至没有像这样打印出来:
结果 1(正常):
0 0xa173a8
...
24 0x701c18
25
结果 2(???每次都有不同数量的元素):
0 0xa173a8
...
12 0xa17548
//没有向量大小,我假设函数有返回值;因为某事
我用 QVector 和 std::vector 都试过了,都是一样的。请如果有人有任何想法,可能是什么问题,请告诉我!
谢谢,对不起我的英语!
编辑
我所有的代码都在这里:
field.h:http://paste2.org/p/1937231
field.cpp:http://paste2.org/p/1937232
player.h:http://paste2.org/p/1937238
player.cpp:http://paste2.org/p/1937239
board.h:http://paste2.org/p/1937234
board.cpp:http://paste2.org/p/1937235
main.cpp:http://paste2.org/p/1937243
【问题讨论】:
-
fields是如何以及在哪里声明的? -
fields 在 Board 类中被声明为私有属性。 (私有:QVector
字段;) -
你能发布更多代码吗?您遇到了哪些奇怪的错误,它们在哪里?
-
问题很可能出在其他地方
-
我现在已经在 64 位和 32 位的 Ubuntu 11.10 上测试了您的代码。我看不到任何应该导致这种情况的东西。然而,我注意到您发布的代码不会按原样编译(缺少标头),因此您似乎 可能 有一个受污染的构建环境。我用 qmake 为你构建了一个干净的构建,rapidshare.com/files/3141791124/game.tar.gz。你应该可以只下载这个,然后“qmake && make”。看看它是否有效。否则,我最好的选择是您使用的是损坏的库或损坏的编译器。