如何在其构造函数的另一个类中分配一个对象数组?
class BloomFilter
{
public:
BloomFilter(double fp, size_t capacity);
private:
size_t bf_m;
size_t bf_k;
};
class RSig {
public:
RSig(int32_t sizeL1, int32_t sizeL2, double bfFpRate) :
numSlot_sig(sizeL1), numSlot_bf(sizeL2)
{
TL_sigMem = new BloomFilter(bfFpRate, numSlot_bf)[sizeL1];
}
private:
int32_t numSlot_sig, numSlot_bf;
BloomFilter* TL_sigMem;
};
上面的代码给出了以下错误:
In constructor 'RSig::RSig(int32_t, int32_t, double)’:
error: expected ‘;’ before ‘[’ token
TL_sigMem = new TL_sigMem(bfFpRate, numSlot_bf)[sizeL1];
最好,我不想使用std::vector
。
答案 0 :(得分:3)
像这样:
#include <vector>
class RSig
{
public:
RSig(double rate, std::size_t len) : TL_sigMen(len, BloomFilter(rate)) {}
private:
std::vector<BloomFilter> TL_sigMem;
};
答案 1 :(得分:1)
要创建对象数组,语法如下:
T* t = new T[<size>];
T
是类型,t
是数组的名称,<size>
是数组的大小。现在,在您的情况下,您希望这样做:
TL_sigMem = new BloomFilter[sizeL1];
这将创建一个大小为BloomFilter
的{{1}}数组。但是,由于您的sizeL1
似乎没有默认构造函数,因此您需要使用BloomFilter
及其std::vector
函数,扼杀您自己的(相当复杂的)方法,或者改为创建一个指针数组:
emplace_back()