我需要创建一个具有数组作为数据成员的类。但是我想这样做,以便用户可以在创建该类的对象时选择数组的大小。这不起作用:
class CharacterSequence {
private:
static int size;
char sequence[size];
public:
CharacterSequence(int s) {
size = s;
}
};
我该怎么做?
答案 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);
});