成员的使用无效

时间:2013-05-11 14:04:30

标签: c++

我想在静态函数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;
...

1 个答案:

答案 0 :(得分:2)

静态memeber功能没有this。而这一行

return m_months.m_monthsArray[days];

相当于

return this->m_months.m_monthsArray[days];

但是daysInMonth是一个静态函数。静态成员函数由类的所有实例共享,只能访问 static membersenumerators的名称,以及声明它的类的嵌套类型< / p>

如果您希望它在非静态成员上运行,则不应使daysInMonth为静态。


public:
    Days daysInMonth(unsigned int days);

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


通常,如果您没有静态成员变量,那么您可能不需要静态成员函数(除了封装之外)。