Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';创建指向另一个类的指针数组的语法是什么?_C++_Arrays_Pointers - Fatal编程技术网

C++ 什么';创建指向另一个类的指针数组的语法是什么?

C++ 什么';创建指向另一个类的指针数组的语法是什么?,c++,arrays,pointers,C++,Arrays,Pointers,如果我有一个带有私有变量的类,它应该包含指向另一个类的指针数组,那么下面的语法正确吗 class MyClass { private: int arraySize; SomeOtherClass* classPtr[]; } 稍后,当我想在MyClass中的一个函数中为这个数组动态分配内存,该函数接受ifstream、从文件读取并填充数组时,我会这样做吗 void createArray(std::ifstream& fin) { //t

如果我有一个带有私有变量的类,它应该包含指向另一个类的指针数组,那么下面的语法正确吗

class MyClass
{
    private:
        int arraySize;
        SomeOtherClass* classPtr[];
}
稍后,当我想在MyClass中的一个函数中为这个数组动态分配内存,该函数接受ifstream、从文件读取并填充数组时,我会这样做吗

void createArray(std::ifstream& fin)
{
    //the first int is the array size
    fin >> arraySize;
    string tempString; //the file is formatted string int string int etc.
    int tempInt;

    classPtr[arraySize];

    for(int i = 0; i < arraySize; i++)
    {
        fin >> tempString;
        fin >> tempInt;
        //assume the constructor is defined
        classPtr[i] = new SomeOtherClass(tempString, tempInt);
    }
void createArray(std::ifstream&fin)
{
//第一个int是数组大小
fin>>排列;
string tempString;//文件的格式为string int等。
int-tempInt;
classPtr[arraySize];
for(int i=0;i>临时字符串;
fin>>tempInt;
//假设构造函数已定义
classPtr[i]=新的SomeOtherClass(tempString,tempInt);
}

谢谢你的时间。

这是错误的。你不能在C++ +/p>中使用可变长度数组。 那应该是

SomeOtherClass**classPtr;

createArray()中


是的,忘记我说的一切,使用
std::vector

数组在编译时必须有一个静态大小,但在您的情况下,只有在运行时从流中读取它时,您才知道大小。对于动态大小的数组,您应该使用
vector

std::vector<SomeOtherClass*> classPtr;
也就是说,在向量中使用原始指针是不可取的,应该小心操作。阅读以了解更多关于它的信息以及它是否适合您。更有可能的是,您只需要对象的
向量

std::vector<SomeOtherClass> vec;
.....
vec.push_back(SomeOtherClass(...));
std::向量向量向量机;
.....
向量推回(其他类(…);

当使用对象的
向量时,您应该确保考虑对象的移动/复制语义,并确保它适合您的用例。

您似乎不需要数组,为什么需要数组?简单的回答是,因为这是赋值要求的。classPtr应该跟踪多个实例SomeOtherClass的ces。虽然其中没有拼写数组的内容……但您永远无法创建指向类的指针。这可能是一个糟糕的赋值。它表示“创建另一个维护SomeOtherClass实例的私有数组的类”。“您将动态地将数组分配为精确大小,然后通过读取文件来填充它。”拥有一个对象向量需要考虑在推回过程中移动/复制对象,以及向量是否需要改变容量。唯一ptr向量可能更好。@beldaz引用的链接提供了大量替代
向量
指针的选项,因此我不想重复这个答案。我将为thinkin添加一个注释g关于移动/复制。
classPtr.reserve(arraySize);
.....
classPtr.push_back(new SomeOtherClass(...));
std::vector<SomeOtherClass> vec;
.....
vec.push_back(SomeOtherClass(...));