在类中使用动态数组会给出错误

Using a Dynamic Array in a class is giving an error

本文关键字:出错 错误 数组 动态      更新时间:2023-10-16

我正在尝试在类中使用动态数组,但收到"非静态成员必须相对于特定对象"错误。这是代码。

class Calendar
{
    private:
        static int holidayCount;
        int * holidayDates = new int[10];
    public:
        static void addHolidayCount() 
        {
            holidayCount++;
        }
        static int getHolidayCount()
        {
            return holidayCount;
        }
        static void addHolidayDate(int day, int month, int year)
        {
            holidayDates[0] = 1;
        }
};

如果我在我的主函数中使用相同类型的设置,我不会得到任何错误。例如:

int * holidayDates = new int[10];
holidayDates[0] = 1;

猜我这里有某种语法错误,但我不确定是什么。

您的holidayDates成员变量是非静态的,因此您创建的每个 Calendar 对象都有一个单独的holidayDates指针(和数组)。

另一方面,addHolidayDate()方法标记为静态,因此它会在任何特定Calendar对象的上下文之外运行。

这意味着如果你尝试从addHolidayDate()内部访问holidayDates,编译器无法分辨你打算使用哪个holidayDates指针;因此会出现错误消息。

解决方案是使holidayDates也成为静态的,或者使addHolidayDate()非静态的。

holidayDates不是静态成员,您不能在静态函数中直接访问它。

static成员变量和函数都独立于类的所有实例。它们不需要要使用的类实例。

static成员变量以及函数只能与类的实例一起使用。

代码中的问题出在函数addHolidayDate 中。它被定义为static成员函数。因此,它不与任何实例相关联。另一方面,成员变量holidayDates是一个非static成员变量。它只能与类的实例一起使用。

我建议addHolidayDatestatic成员函数。

// Don't use static
void addHolidayDate(int day, int month, int year)
{
   holidayDates[0] = 1;
}

不能访问静态方法中的非静态字段。因此,请删除static以进行addHolidayDate

class Calendar {
private:
    static int holidayCount;
    int * holidayDates = new int[10];
public:
    void addHolidayCount()
    {
        holidayCount++;
    }
    int getHolidayCount()
    {
        return holidayCount;
    }
    void addHolidayDate(int day, int month, int year)
    {
        holidayDates[0] = 1;
    }
};

下面是如何使用此类的示例:

int main()
{
    Calendar* c = new Calendar();
    c->addHolidayDate(1, 2, 3);
    return 0;
}
相关文章: