我有一个卡片类,我在其中初始化一个矢量:
#ifndef CARD_H
#define CARD_H
#include <vector>
using namespace std;
class Card
{
private:
vector<int> CC;
vector<int> iChance;
public:
Card();
void draw_Card();
};
#endif
在我的.cpp文件中我有
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>
#include <iterator>
#include "card.h"
using namespace std;
Card::Card()
{
srand(time(NULL));
vector<bool> drawn(20);
for (int i = 0; i < 20; i++)
{
int numvalue = rand()%20 + 1;
if (drawn[numvalue - 1])
{
i--;
continue;
}
else
{
drawn[numvalue - 1] = true;
CC.push_back(numvalue);
iChance.push_back(numvalue);
}
}
copy (CC.begin(), CC.end(), ostream_iterator<int>(cout, " "));
}
当我为CC调用push_back函数时,这是segfaulting,这意味着向量CC没有被正确传递?
如果我调用不在私有区域中的向量并且直接在构造函数内部调用它,它就可以工作。对不起,如果这可能是一个非常简单的修复,只是开始学习类和向量。谢谢你的帮助。
编辑:我几乎可以肯定这是问题所在。 CC和iChance的值没有进入构造函数,所以当程序试图为变量设置一个值时,什么都不存在,并且它会出错。
另外我注意到如果我在cpp文件而不是.h文件中声明了CC和iChance变量,程序就可以工作了。
我只想弄清楚为什么以及如何解决这个问题