在类中使用动态数组会给出错误
Using a Dynamic Array in a class is giving an error
我正在尝试在类中使用动态数组,但收到"非静态成员必须相对于特定对象"错误。这是代码。
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
成员变量。它只能与类的实例一起使用。
我建议addHolidayDate
非static
成员函数。
// 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;
}
相关文章:
- 分段错误当我试图运行程序时出错
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 制作时出错,C++"db.c:2127:错误:在"||"标记之前应使用";"
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 在VS2015中访问类成员时运行时错误,但在Linux上未访问时出错
- 如何更改路径以修复错误"./main:加载共享库 libmkl_core.so 时出错?
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 安装 mply 库时出错.致命错误:gsl/gsl_sf.h:没有这样的文件或目录
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 编译特征程序时出错:错误:'seq'不是'Eigen'的成员
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 运算符重载时出错(错误:"运算符<<不匹配(操作数类型为"std::basic_ostream<char>"和"const char [2]")
- 编译类 C++ 中的线程时出错(错误 xthread)
- 加载GLEW库时出错(错误LNK2001)
- 通过函数指针调用函数时出错(错误C2064)
- 编译core.obj时出错:错误LNK2001:未解析的外部符号_harmony_core_init
- 链接c++静态库与android ndk时出错(错误:无法识别文件格式)
- 使用GCC编译游戏时出错.(错误:将"Screen"的含义从"class Screen&q