我想在静态函数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;
...
答案 0 :(得分:2)
静态memeber功能没有this
。而这一行
return m_months.m_monthsArray[days];
相当于
return this->m_months.m_monthsArray[days];
但是daysInMonth
是一个静态函数。静态成员函数由类的所有实例共享,只能访问 static members
,enumerators
的名称,以及声明它的类的嵌套类型< / p>
如果您希望它在非静态成员上运行,则不应使daysInMonth
为静态。
public:
Days daysInMonth(unsigned int days);
现在它可以根据成员所属的对象对成员进行操作。
通常,如果您没有静态成员变量,那么您可能不需要静态成员函数(除了封装之外)。