无效地使用成员

Invalid use of member

本文关键字:成员 无效      更新时间:2023-10-16

我想在静态函数dayInMonths()中调用数组的字段,但编译器告诉我"在静态函数中无效使用成员Date::m_months"。我不知道我做错了什么。

. h

class Date
{
public:
    ..
    Months* m_months;
    ..
public:
    Date(..,unsigned int months=0,..);
    ~Date();
public:
    static Days daysInMonth(unsigned int days);
};
class Months
{
public:
    unsigned int m_months;
    unsigned int m_monthsArray[13];
public:
    Months(unsigned int months = 0);
..

date.cpp

Date::Date(unsigned int days, unsigned int months, unsigned int years)
{
    ..
    m_months->m_months = months;
    ..
}
Days Date::daysInMonth(unsigned int days=0){
    return m_months.m_monthsArray[days];
}

months.cpp

Months::Months(unsigned int months)
{
    m_months = months;
    m_monthsArray[0] = 29;
    m_monthsArray[1] = 31;
...

静态成员函数没有this。这一行

return m_months.m_monthsArray[days];

等价于

return this->m_months.m_monthsArray[days];

daysInMonth是静态函数。静态成员函数由类的所有实例共享,只能访问声明它的类的static membersenumerators和嵌套类型的名称

如果你想让daysInMonth对非静态成员进行操作,就不应该把它设为static。


public:
    Days daysInMonth(unsigned int days);

现在可以根据所属对象对成员进行操作。


一般来说,如果你没有静态成员变量,那么你可能不需要静态成员函数(除了为了封装)。