试图创建指针数组时不允许使用不完整类型。

8

我创建了两个类,分别是Branch和Account,我希望我的Branch类有一个指向Account的指针数组,但我无法做到。它会显示"不允许不完整的类型"。我的代码哪里出了问题?

#include <string>
#include "Account.h"

using namespace std;



    class Branch{

    /*--------------------public variables--------------*/
    public:
        Branch(int id, string name);
        Branch(Branch &br);
        ~Branch();
        Account* ownedAccounts[];    // error at this line
        string getName();
        int getId();
        int numberOfBranches;
    /*--------------------public variables--------------*/

    /*--------------------private variables--------------*/
    private:
        int branchId;
        string branchName;
    /*--------------------private variables--------------*/
    };

2
数组在编译时是否具有已知大小?另外,您确定需要“Account”指针而不仅仅是对象吗? - chris
那一行没有错误,使用g++编译器。演示链接:http://ideone.com/wczznf 因为我没有“Account.h”文件,所以我写了一个空的类:class Account; - Ben Voigt
数组的大小在开始时为0,我将动态扩展它。是的,我需要Account指针,因为Account对象的数组位于另一个文件中,我还需要从名为Customer的另一个类中指向它。 - Burak Özmen
我不明白你的意思。首先,你可以使用 std::vector 来进行调整和其他操作。关于你的结构,如果 Customer.hBranch.h 都包含 Account.h,它们都可以正常地使用普通对象,不需要使用指针。 - chris
1
我们不允许使用 std::vector。至于我的结构,它在我脑海中有点复杂,我无法解释得太清楚。 - Burak Özmen
2个回答

12

尽管可以创建指向前置声明类的指针数组,但无法创建大小未知的数组。如果想在运行时创建数组,请创建指向指针的指针(当然也是允许的):

Account **ownedAccounts;
...
// Later on, in the constructor
ownedAccounts = new Account*[numOwnedAccounts];
...
// Later on, in the destructor
delete[] ownedAccounts;

考虑到Account类的应用,我认为使用比C风格原始数组更好的容器是个不错的主意,它具有方便的函数等功能。此外,它也不需要手动删除。 - dtech
@ddriver 这是完全正确的。然而,所提到的代码看起来像是一个学习任务,所以可能OP还没有学习容器。 - Sergey Kalinichenko
好的,我强调你必须遵循三或五法则。如果你忽略了它,它不起作用时请不要回来。 - chris
实际上,在我们的作业中,内存泄漏是不可接受的,所以我将使用析构函数、构造函数和拷贝构造函数。 - Burak Özmen
赋值运算符,可能还有移动构造函数和移动赋值运算符。 - chris

6

您需要指定数组的大小... 您不能只是让方括号空着,里面什么也没有。


1
你能详细说明一下吗?考虑到这个例子http://www.cplusplus.com/doc/tutorial/arrays/中```int firstarray[]```有空括号。 - 001001
1
这是帮助我的答案。有趣的是,在堆栈上实例化数组时不指定大小可以工作,但在类声明的一部分中则不行。虽然这个解释很合理,但对我来说还是有点惊讶。 - Roland Sarrazin
这个更有帮助。我在const char* arrApples[]={"1", "2", "3"}; 遇到了错误,但需要 const char* arrApples[3]={"1", "2", "3"};... 我在头文件中添加了数组的大小。 - Michele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接