【发布时间】:2011-10-10 01:28:21
【问题描述】:
我正在做一个项目,让我存储一个对象数组,其构造函数是
Item(char* item, int itemType){
char temp[200];
for(int i = 0; i < 200; i++){
temp[i] = '\0';
if(item[i] != '\0'){
temp[i] = item[i];
}
}
_item = item;
_itemType = itemType;
_tweetIDs = NULL;
}
不用担心 _tweetID,这是我程序的另一个功能部分,与我的问题无关。
这个数组存储在一个类中:
ItemList()
它的工作原理是我的程序的功能部分解析一行输入并将其放入 Item(char*, int) 对象中。这是它添加行的方式:
int addItem(char* item, int type){
char temp1[200];
for(int i = 0; i < 200; i++){
temp1[i] = '\0';
}
int j = 0;
while(item[j] != '\0'){
temp1[j] = item[j];
j++;
}
_items[_size] = Item(temp1, type);
_size++;
return _size;
}
其中 _items 是 Item() 数组,_size 是每次添加 Item() 时递增的字段。
当我必须打印列表的内容时,我的问题就出现了。
我有一个方法可以做到这一点:
void printList(){
for(int i = 0; i < 500; i++){
if(_items[i] != NULL){
cout << "[" << i << "] ";
_items[i]->printContents();
}
}
}
我在 Item() 的构造函数中测试了 printContents() 并在 addItem 方法中测试了 printList,它们在类本身中调用时都可以工作。当我必须在类主体之外调用 print 方法时,问题就出现了。
在main方法中,我创建了一个List对象:
List itemList;
默认构造函数将 Item() 数组的所有成员设置为 NULL 并初始化 _size。
在将一些 Item() 对象添加到数组中后(我通过调试器确认其大小正在增加),我尝试将其打印出来。当我打电话时:
itemList.printList();
它为我提供了适量的索引(和行),但 char 数组只是一堆垃圾。我使用调试器尝试找出问题所在。在 addItem() 方法中,我调用了 printList 来检查数组,结果很好。然后,我在最后一次 addItem() 调用之后立即调用了 itemList.printList(),它给了我垃圾。在 addItem() 和 itemList.printList() 之间,char 数组丢失或类似的东西。
知道出了什么问题吗?如果你需要,我会给你更多代码。
【问题讨论】:
-
你可能想在类声明中写
memcpy(_item, item, 200);并将_item声明为char _item[200],这样它的寿命就会比构造函数的实例长。 -
@ruslik 我将临时数组放入我的类字段中,现在效果很好。感谢您的帮助!
-
请阅读What are the rules about using an underscore in a C++ identifier?。它会在以后为您节省一些惊喜。
标签: c++ arrays printing char cout