C ++成员私有数组变量 - 在编译时未定义

时间:2013-03-19 21:50:33

标签: c++ arrays private member

我有一个数组,我希望它是一个私有成员变量。我的程序作为实现选择排序的方式是,main方法以数组的大小提供,构造函数传入并创建具有给定大小的新数组。

我已经完成了Java,但在C ++中无法弄清楚。 (看了这个网上其他人的帖子后,我发现我必须让我的变量变为静态)

谢谢。

[ArrayS.h]

public:
    ArrayS(void);
    ArrayS(int max);
    ~ArrayS(void);

private:
        static long a [0];  

[ArrayS.cpp]

ArrayS::ArrayS(void)
{

}

ArrayS::ArrayS(int max)
{
    long ArrayS::a [max];                 
    nElems = 0; 
}

谢谢。

2 个答案:

答案 0 :(得分:1)

上面的代码有两个问题。第一个是在C ++中你不能有一个大小为0的数组。第二个是对于类的静态成员,你需要在一个翻译单元中提供一个定义:

struct test {
   static long a[10];
};
// in a single .cpp
long test::a[10] = {};

除此之外,如果需要仅在运行时已知的大小的数组,则不能使用原始数组。您可以使用动态分配的内存(通过new[]),但最好使用std::vector<long>。此外,目前还不清楚您是否真的需要该成员static。该上下文中的static关键字表示类成员(即,由程序中的所有代码共享,而非每个实例数据)

答案 1 :(得分:0)

您需要在类外部再次定义变量。每当你有一个静态成员。 虽然g ++编译的c ++代码具有大小为零的数组,但如果这是你真正想要的,那就重新考虑。