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

时间:2017-11-03 05:21:25

标签: c++

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

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

如果我在main函数中使用相同类型的设置,则不会出现任何错误。例如:

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

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

4 个答案:

答案 0 :(得分:1)

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

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

这意味着如果您尝试从holidayDates中访问addHolidayDate(),编译器无法分辨您要使用的holidayDates指针;因此错误信息。

解决方案是将holidayDates设为静态,或使addHolidayDate()为非静态。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

static成员变量以及函数独立于类的所有实例。他们不需要使用该类的实例。

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

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

我建议将addHolidayDate设为非static成员函数。

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

答案 3 :(得分:0)

您无法访问静态方法中的非静态字段。因此,请移除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;
}