gpt4 book ai didi

c++ - 如何在可变大小的类中创建指针数组?

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:26 26 4
gpt4 key购买 nike

下面的代码确实有效,除了行 POINTEE* pointee[10]; 是静态的,我想在创建类时使其动态化,因此它可以是任意大小.

#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;
}

我不想使用 std::vector 主要是因为我正在尝试设计自己的数据容器。我也试过做

#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;
}

但这会导致出现其他错误:

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 ===|

最佳答案

除非您真的想创建自己的 vector 类,否则我肯定会自己使用 vector ,但您的代码存在一些问题:

下面创建一个指向 10 个 POINTEE 对象数组的指针 pointee。它不指向指向 POINTEE 对象的指针。

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

如果您将这些行更改为以下内容:

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

那么您的代码至少可以正常工作了。我没有仔细看,但我认为您的其余代码大部分是可编译的。

关于c++ - 如何在可变大小的类中创建指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17127444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com