【问题标题】:C++ member private array variable - Undefined at compile timeC++ 成员私有数组变量 - 编译时未定义
【发布时间】:2013-03-19 21:50:32
【问题描述】:

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

我已经在 J​​ava 中完成了,但在 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; 
}

谢谢。

【问题讨论】:

  • 如果数组的大小可以变化,不要使用long a [0];0 大小不正确。使用std::vector<long> a;
  • 要创建具有运行时定义大小的数组,请使用std::vector 或类似名称。 static 会让你无处可去。
  • 您不太可能需要static 数据成员。

标签: c++ arrays private member


【解决方案1】:

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

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

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

【讨论】:

  • 我将使用 std::vector。谢谢
【解决方案2】:

您需要在类之外再次定义变量。只要你有一个静态成员。 尽管 g++ 编译的 c++ 代码的数组大小为零,但请重新考虑这是否是您真正想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多