初始化构造函数内部的向量给出seg错误

时间:2014-04-16 05:23:29

标签: c++ class vector

我有一个卡片类,我在其中初始化一个矢量:

#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变量,程序就可以工作了。

我只想弄清楚为什么以及如何解决这个问题

0 个答案:

没有答案