C ++在类的初始化时设置数组数据成员的大小

时间:2015-12-29 11:37:56

标签: c++ arrays

我需要创建一个具有数组作为数据成员的类。但是我想这样做,以便用户可以在创建该类的对象时选择数组的大小。这不起作用:

class CharacterSequence {

private:

  static int size;
  char sequence[size];

public:

  CharacterSequence(int s) {
    size = s;
  }

};

我该怎么做?

4 个答案:

答案 0 :(得分:3)

使用std::vector

class CharacterSequence
{
private:
    std::vector<char> _sequence;

public:
    CharacterSequence(int size) : _sequence(size)
    {
    }
}; // eo class CharacterSequence

答案 1 :(得分:1)

你做不到。 C ++不支持可变长度数组。

为什么不使用std::vector<char>代替?它的大小可以在构造中设置。

答案 2 :(得分:0)

其他人建议使用std :: vector ...但我不认为你真正想要的是什么。我想你想要一个模板:

template <int Size>
class CharacterSequence {

private:

  char sequence[Size];

public:

  CharacterSequence() {
  }
};

然后,您可以将其实例化为您想要的任何大小,例如:

CharacterSequence<50> my_sequence;

答案 3 :(得分:0)

在运行时确定数组的大小只不过是在运行时分配内存。但是在编译期间必须确定数组的大小。因此,您无法按照上面提到的方法。

或者,您可以在运行时创建指针并分配内存,即您可以在创建对象时指定希望的大小,如下所示:

var Path = require('path');
var google = require('googleapis');
var gmail = google.gmail('v1');
var key = require(Path.join(__dirname, 'googleConfig.json'));
var oAuthClient = new google.auth.JWT(
    key.client_email,
    null,
    key.private_key,
    ['https://www.googleapis.com/auth/calendar.readonly', 'https://www.googleapis.com/auth/gmail.send'],
    null
);

var message = new Buffer(
    "Content-Type: text/plain; charset=\"UTF-8\"\n" +
    "MIME-Version: 1.0\n" +
    "Content-Transfer-Encoding: 7bit\n" +
    "To: <some email>\n" +
    "From: <some email>\n" +
    "Subject: something something lol\n\n" +
    "heyheyhey"
).toString('base64').replace(/\+/g, '-').replace(/\//g, '_');

gmail.users.messages.send({
    auth: oAuthClient,
    userId: '<my own google email?>',
    resource: {
        raw: message
    }
}, function(err, resp) {
    console.log('err', err);
    console.log('resp', resp);
});