C++Deck类中的分段故障(堆芯转储)
Segmentation Fault (core dumped) in C++ Deck class
我想从Cards
的类中生成一个名为Deck
的类。然而,每当我试图查看我在Deck
中放入了什么时,我都会收到一个错误,上面写着Segmentation fault (core dumped)
。我该怎么解决这个问题?我从其他问题中了解到,我的程序可能试图访问尚未分配的内存,但我不知道这是在哪里发生的。这是我写的代码:
甲板.h:
#ifndef DECK_H
#define DECK_H
#include <vector>
#include "card.h"
class Deck
{
friend ostream &operator<<(ostream &, Deck &);
public:
Deck();
void shuffle();
private:
vector<Card> myDeck;
};
#endif
Deck.cpp
#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
#include "deck.h"
#include "card.h"
Deck::Deck()
{
for(int i = 1; i <= 4; i++)
{
for(int j = 1; j <= 13; j++)
{
Card myCard(j,i);
myDeck.push_back(myCard);
}
}
}
void Deck::shuffle()
{
for(int i = 0; i < 52; i++)
{
Card temp(1,1);
int swapID = rand() % 52;
temp = this->myDeck[i];
this->myDeck[i] = this->myDeck[swapID];
this->myDeck[swapID] = temp;
}
}
ostream &operator<<(ostream &output, Deck &theDeck)
{
for(int i = 0; i < 52; i++)
{
cout << theDeck.myDeck[i];
}
}
card.h:
#ifndef CARDS_H
#define CARDS_H
#include <string>
using namespace std;
class Card {
friend ostream &operator<<(ostream &, Card &);
public:
Card(int face, int suit);
void showCard();
private:
string face;
string suit;
void processFace(int value);
void processSuit(int suit);
};
#endif
card.cpp:
#include <iostream>
#include <string>
#include "card.h"
using namespace std;
Card::Card(int face, int suit)
{
processFace(face);
processSuit(suit);
cout << "New card created" << endl;
}
void Card::showCard()
{
cout << "This is the " << this->face << " of " << this->suit << endl;
}
void Card::processFace(int value)
{
switch(value)
{
case 1:
{
face = "Ace";
break;
}
case 2:
{
face = "2";
break;
}
case 3:
{
face = "3";
break;
}
case 4:
{
face = "4";
break;
}
case 5:
{
face = "5";
break;
}
case 6:
{
face = "6";
break;
}
case 7:
{
face = "8";
break;
}
case 9:
{
face = "9";
break;
}
case 10:
{
face = "10";
break;
}
case 11:
{
face = "Jack";
break;
}
case 12:
{
face = "Queen";
break;
}
case 13:
{
face = "King";
break;
}
}
}
void Card::processSuit(int decider)
{
switch(decider)
{
case 1:
{
suit = "Hearts";
break;
}
case 2:
{
suit = "Diamonds";
break;
}
case 3:
{
suit = "Clubs";
break;
}
case 4:
{
suit = "Spades";
break;
}
}
}
ostream &operator<<(ostream &output, Card &myCard)
{
output << myCard.face << " of " << myCard.suit << endl;
}
main.cpp:
#include <iostream>
#include <string>
#include <vector>
#include "card.h"
#include "deck.h"
using namespace std;
int main()
{
Deck mainDeck;
cout << mainDeck << endl << endl;
}
您的方法
ostream &operator<<(ostream &output, Deck &theDeck)
{
for(int i = 0; i < 52; i++)
{
cout << theDeck.myDeck[i];
}
}
应该返回ostream&
,但它没有返回任何内容。此外,您应该在output
上调用operator<<
,而不是在cout
上调用(您将把cout
传递给此方法):
ostream &operator<<(ostream &output, const Deck &theDeck)
{
for(int i = 0; i < 52; i++)
{
output << theDeck.myDeck[i];
}
return output;
}
此外,请确保Card
类型的operator<<
已正确写入。
相关文章:
- 分段故障(堆芯转储)矢量
- 正在处理故障(堆芯转储)
- 分段故障(核心转储)-不知道为什么
- 打开C++故障转储不会在调用堆栈中显示正确的行
- 内存集分段故障内核转储
- 我如何修复分段故障(核心转储)
- 故障转储文件是否需要崩溃时正在运行的本地文件
- 分割故障(核心转储)C
- 分段故障核心转储,矢量嵌套在矢量中
- CORBA C++/Java应用程序中服务器端的分段故障(核心转储)
- 在更改lpthreads中的处理器数量时出现分段故障(核心转储)
- c++fgets分段故障(核心转储)
- 分段故障核心转储矢量指针
- 分段故障核心已转储
- C++分段故障核心转储
- 分段故障核心转储的并行阵列
- 为什么这个二维矢量会导致分段故障(磁芯转储)
- 分段故障核心转储C++
- 调试大型项目的分段故障(核心转储)
- 分段故障(核心转储) 4.