在类中声明矢量大小

时间:2014-11-16 16:53:59

标签: c++ class object vector visual-studio-2013

我应该编写一个模拟骰子(6面)滚动6000次的程序,并将结果存储在矢量中。例如,如果骰子卷返回1,我会做类似frequency.at(0)++的事情。由于向量的大小将被修复,我还需要能够自由地访问每个元素,我想知道是否还有使用默认构造函数或其他东西来声明向量的大小。这是我目前所拥有的,但我得到“函数调用中的参数太多”和“表达式必须具有类类型”错误。也许我想做的事情是不可能的,我不知道,但只是寻求一些帮助。感谢。

我的标题文件:

#ifndef AHISTOGRAM_H
#define AHISTOGRAM_H


class aHistogram
{
public:
    aHistogram();
    ~aHistogram();
    void update(int face);
    void display(int maxLengthOfLine);
    void clear() const;
    int count(int face);
private:
    vector<int> numRolls();
    int numx, m, j;
};

#endif

aHistogram.cpp:。

#include <iostream>
#include <cstdlib>
#include <vector>
#include "aHistogram.h"
using namespace std;

aHistogram::aHistogram()
{
    numRolls(6);
    numx, m, j = 0;
}

aHistogram::~aHistogram()
{
}

void aHistogram::update(int face)
{
    numRolls.at(face - 1)++;
    return;
}

2 个答案:

答案 0 :(得分:2)

这是构造函数的初始化列表的用途:

aHistogram::aHistogram(): numRolls(6), numx(0), m(0), j(0) // constructor parameters here
{
    // numRolls(6);
    // numx m, j = 0;
}

您的矢量声明在您的类定义中也是错误的:

class aHistogram
{
public:
    aHistogram();
    ~aHistogram();
    void update(int face);
    void display(int maxLengthOfLine);
    void clear() const;
    int count(int face);
private:
    // vector<int> numRolls(); // this is declaring a function!
    vector<int> numRolls; // USE THIS!!
    int numx, m, j;
};

答案 1 :(得分:0)

如果&#34;向量&#34;的大小固定,然后使用std::array肯定是一个更好的选择,除非你使用的是一个不支持C ++ 11的古老编译器。

浏览cppreference.com上的以上链接。在大多数情况下,它就像一个老式的&#34;数组,但它还带来了诸如边界检查(如果您使用at()而不是operator[]),迭代元素(begin()end()等等)的好处。 ),以及许多其他&#34;的好处&#34; std::vector

看看这个:

#include <iostream>
#include <array>
using namespace std;

class aHistogram {
public:
    aHistogram() : numRolls{0, 0, 0, 0, 0, 0} {}

    int count(int face) {
        return numRolls.at(face - 1);
    }

    void update(int face) {
        numRolls.at(face - 1)++;
    }

private:
    array<int, 7> numRolls;
};

int main() {
    aHistogram ah;
    ah.update(1);
    ah.update(2);
    ah.update(1);

    cout << "Count[1]: " << ah.count(1) << " Count[2]: " << ah.count(2) << endl;
}