Reputation: 5585
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
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