On Tue, 10 Apr 2012 13:58:44 +0200, CrudOMatic <crudoma...@gmail.com> wrote:

Sorry, but a small issue.

the line: auto card = cards.popBack();

throws the errors:

error: variable xxx.card voids have no value
error: expression popBack(this.cards) is void and has no value

I tried reserving the space, I even tried cards = new Card[no_cards];

Sorry, popBack returns void. You have to get the back of the array before calling popBack(). Here's an example:

import std.array;
class Card {}
void main() {
    Card[] cards;
    cards.reserve(1024);
    assert(cards.capacity >= 1024);
    assert(cards.length == 0); // still 0

    cards ~= new Card(); // add a Card
    assert(cards.length == 1);

    auto card = cards.back; // get last element
    cards.popBack(); // remove last element
    assert(card); // non-null
    assert(cards.length == 0); // "empty" again
assumeSafeAppend(cards); // allow us to append to it without reallocating

    auto oldptr = cards.ptr;
    cards ~= new Card();
    assert(cards.length == 1);
    assert(card); // card still alive and kicking
    assert(cards.ptr == oldptr); // and no reallocation
}

Reply via email to