Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何创建包含对象向量的类?_C++_Segmentation Fault - Fatal编程技术网

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);
}