1

我想在静态函数中调用数组的字段,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);
..

日期.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];
}

月.cpp

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

1 回答 1

2

静态成员函数没有this. 而这条线

return m_months.m_monthsArray[days];

相当于

return this->m_months.m_monthsArray[days];

但是daysInMonth是一个静态函数。静态成员函数由类的所有实例共享,并且只能访问声明它的类的名称static members、、和嵌套类型enumerators

daysInMonth如果您希望它对非静态成员进行操作,则不应将其设为静态。


public:
    Days daysInMonth(unsigned int days);

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


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

于 2013-05-11T14:07:16.463 回答