使用指针c ++进行动态分配

时间:2014-03-25 01:51:34

标签: c++

Transaction *trans = new Transaction[MAX_NUM];
int currentnum;


addtrans(string balance, double amt){

    trans[currentnum] = new Transaction(balance, amt);
    currentnum ++;
}

//constructor

Transaction(string type, double amt){

      Transtype = type;
       Transamt = amt;
 }

我已经创建了一个指向数组的指针。

我正在尝试向数组发送余额和amt,但我收到的错误是'不匹配'运营商=''

2 个答案:

答案 0 :(得分:2)

Transaction *trans = new Transaction[MAX_NUM];

这为您提供了一个指向Transaction个对象数组的指针。

trans[currentnum] = new Transaction(balance, amt);

这会尝试分配到数组中的Transaction对象,但new Transaction(...)调用会将 指针 返回给Transaction并且指针不是数组的数据元素类型,因此不会编译。

你可以说:

trans[currentnum] = Transaction(balance, amt);

或者,你可以这样做:

Transaction** trans = new (Transaction*)[MAX_NUM];
trans[currentnum] = new Transaction(balance, amt);

但使用它几乎肯定更好:

std::vector<Transaction> trans(MAX_NUM);

如果你真的必须有MAX_NUM默认构造的元素,或者更好......

std::vector<Transaction> trans;

当你走的时候只有.push_back(Transaction(balance,amt)),所以你基本上不必担心任何MAX_NUM或索引容器的末尾。如果你有一个C ++ 11编译器,你可以使用.emplace_back(balance, amt)来获得更好的性能并直接在容器中构造Transaction对象。

答案 1 :(得分:0)

改为使用std::vector

std::vector<Transaction> trans;
trans.reserve(MAX_NUM);

addtrans基本上可以简化为:

trans.emplace_back(balance, amt);