0

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

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

提前感谢您的时间。

4

2 回答 2

2

这是不正确的。您还不能在 C++ 中使用可变长度数组

那应该是

SomeOtherClass** classPtr;

而在createArray()

...
classPtr = new SomeOtherClass*[arraySize];
...

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

于 2013-02-13T02:46:43.480 回答
0

数组在编译时必须具有静态大小,但在您的情况下,您不知道大小,直到您在运行时从流中读取它。对于动态大小的数组,您应该使用 avector代替:

std::vector<SomeOtherClass*> classPtr;

然后在下面的代码中:

classPtr.reserve(arraySize);
.....
classPtr.push_back(new SomeOtherClass(...));

话虽如此,不建议在向量中使用原始指针,并且应该小心。阅读此答案以了解有关它的更多信息以及它是否适合您。更有可能的是,您只需要一个vector对象:

std::vector<SomeOtherClass> vec;
.....
vec.push_back(SomeOtherClass(...));

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

于 2013-02-13T02:49:08.303 回答