我正在尝试在类中使用动态数组,但我得到“非静态成员必须相对于特定对象”错误。这是代码。
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;
我猜这里有一些语法错误,但我不确定是什么。
答案 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;
}