pandoragami
pandoragami

Reputation: 5585

How to create an array of pointers within a class with variable size?

I have the following code below which does work except that the line POINTEE* pointee[10]; is static and I want to make it dynamic whenever I create a class so it can be any size.

#include <iostream>

class POINTEE
{
    private:

        int index;

    public:

    POINTEE(){}
    POINTEE(int index)
    {
        this->index = index;
    }
    ~POINTEE(){}
    void print_index()
    {
        std::cout<<index<<std::endl;
    }
};
void fill_element(POINTEE* &pointee, int index)
{
    pointee = new POINTEE(index);
}
int main()
{
    POINTEE* pointee[10];//I want to declare this within a class with a variable size instead of 10

    for(int index = 0; index < 10; index++)
        pointee[index] = NULL;

    for(int index = 0; index < 10; index++)
    {
        POINTEE* temp_pointee;
        fill_element(temp_pointee, index);
        pointee[index] = temp_pointee;
    }

    for(int index = 0; index < 10; index++)
        pointee[index]->print_index();

     for(int index = 0; index < 10; index++)
        delete pointee[index];

    return 0;
}

I don't want to use std::vector mainly because I'm trying to design my own data container. I also tried doing

#include <iostream>

class POINTEE
{
    private:

        int index;

    public:

    POINTEE(){}
    POINTEE(int index)
    {
        this->index = index;
    }
    ~POINTEE(){}
    void print_index()
    {
        std::cout<<index<<std::endl;
    }
};
void fill_element(POINTEE* &pointee, int index)
{
    pointee = new POINTEE(index);
}
int main()
{
    POINTEE* pointee;// I changed this
    pointee = new POINTEE[10];//and this and also deleted pointee below

    for(int index = 0; index < 10; index++)
        pointee[index] = NULL;

    for(int index = 0; index < 10; index++)
    {
        POINTEE* temp_pointee;
        fill_element(temp_pointee, index);
        pointee[index] = temp_pointee;
    }

    for(int index = 0; index < 10; index++)
        pointee[index]->print_index();

     for(int index = 0; index < 10; index++)
        delete pointee[index];

    delete [] pointee;//I added this which maybe totally stupid!

    return 0;
}

but that made other errors appear:

C:\Documents and Settings\project5\array_of_pointers_ops\array_of_pointers_ops.cpp||In function 'int main()':|
C:\Documents and Settings\project5\array_of_pointers_ops\array_of_pointers_ops.cpp|38|error: invalid conversion from 'POINTEE*' to 'int'|
C:\Documents and Settings\project5\array_of_pointers_ops\array_of_pointers_ops.cpp|38|error:   initializing argument 1 of 'POINTEE::POINTEE(int)'|
C:\Documents and Settings\project5\array_of_pointers_ops\array_of_pointers_ops.cpp|42|error: base operand of '->' has non-pointer type 'POINTEE'|
C:\Documents and Settings\project5\array_of_pointers_ops\array_of_pointers_ops.cpp|45|error: type 'class POINTEE' argument given to 'delete', expected pointer|
||=== Build finished: 4 errors, 0 warnings ===|

Upvotes: 1

Views: 2257

Answers (1)

Justin Peel
Justin Peel

Reputation: 47082

I would definitely use a vector myself unless you really want to make your own vector class, but here are some issues with your code:

The following creates a pointer pointee that points to an array of 10 POINTEE objects. It does not point to pointers to POINTEE objects.

POINTEE* pointee;// I changed this
pointee = new POINTEE[10];//and this and also deleted pointee below

If you change the lines to the following:

POINTEE** pointee;
pointee = new POINTEE*[10];

then your code is at least a lot closer to working. I didn't look too closely, but I think that the rest of your code was mostly compilable.

Upvotes: 1

Related Questions