C++ 如何创建包含对象向量的类?
我在C++ 如何创建包含对象向量的类?,c++,segmentation-fault,C++,Segmentation Fault,我在Flashcard.h和Flashcard.cpp中声明了类Flashcard。我想制作一个类CardList,它应该存储std::vector以及一些其他信息,并提供一些操作它的方法 CardList.h 问题 无论何时调用CardList::getCard或CardList::setCard,我都会收到一个segfault。例如: #include "Flashcard.h" #include "CardList.h" /* ... */ int main( int argc, cha
Flashcard.h
和Flashcard.cpp
中声明了类Flashcard
。我想制作一个类CardList
,它应该存储std::vector
以及一些其他信息,并提供一些操作它的方法
CardList.h
问题
无论何时调用CardList::getCard
或CardList::setCard
,我都会收到一个segfault。例如:
#include "Flashcard.h"
#include "CardList.h"
/* ... */
int main( int argc, char** argv ) {
/* Creates flashcard card */
Flashcard card;
/* (do things to card) */
CardList card_list(7);
std::cout << "Declaration and initialisation of card_list successful" << std::endl;
card_list.setCard(0, card); // *** SEGFAULT ***
std::cout << "Assignment successful" << std::endl;
/* ... */
return 0;
}
#包括“Flashcard.h”
#包括“CardList.h”
/* ... */
int main(int argc,字符**argv){
/*创建抽认卡*/
抽认卡;
/*(按卡办事)*/
卡片列表卡片列表(7);
std::cout此代码完全不符合您的想法:
CardList::CardList ( int number_of_cards ) {
std::vector<Flashcard> card_list(number_of_cards);
}
seg错误是因为您从未调整卡列表的大小。您版本的构造函数中的代码创建了一个不同的临时卡列表,该临时卡列表在构造函数退出后立即被销毁。同时,卡列表成员的默认大小为零。您的类中有一个名为卡列表的属性,但您在构造函数中未正确初始化。在代码中,您有:
CardList::CardList ( int number_of_cards ) {
std::vector<Flashcard> card_list(number_of_cards);
}
我怀疑您的错误出现在Flashcard
的复制构造函数或析构函数中,您拒绝让我们看到它。我建议使用调试器,逐步检查您的代码,并确定它来自何处。谢谢,这是有效的。:
是一个例子吗?是的,:
以及它通常优于assig的原因在您链接的问题中,构造函数主体中的元素似乎得到了很好的解释。
CardList::CardList ( int number_of_cards ) {
std::vector<Flashcard> card_list(number_of_cards);
}
CardList::CardList ( int number_of_cards ) :
card_list(number_of_cards)
{
}
CardList::CardList ( int number_of_cards ) {
std::vector<Flashcard> card_list(number_of_cards);
}
CardList::CardList ( int number_of_cards ) {
this->card_list = std::vector<Flashcard>(number_of_cards);
}