2013-05-11 4 views
0

Я хочу вызвать поле массива в статической функции 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

'm_months' является членом любого данного экземпляра класса' Date'. Статическая функция 'daysInMonth' вызывается * без * экземпляра. Какой 'm_months' вы думаете, на что он действует? Может быть, вы хотите, чтобы 'daysInMonth' принимал' Months * ', или быть нестатической функцией-членом. – BoBTFish

+0

Можете ли вы объяснить, почему ** вы хотите, чтобы 'daysInMonth' являлся * статической * функцией? Из всего, что вы показываете, этого не должно быть. –

+0

okey, у меня есть право, мне нужно это «Месяцы * m; return m-> m_monthsArray [days];" но я получаю адрес памяти. Я знаю, что это основы C++, но -.- – user2372976

ответ

2

Функция Static memeber не имеют 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); 

Теперь он может работать на членов на основе объекта он принадлежит.


Вообще, если у вас нет статических переменных-членов, то вы, вероятно, не нужна статическая функция-член (для капсулирования за исключением).

+0

Вот почему я использую статическую функцию: int feb = Date :: daysInMonth (2); – user2372976

+0

@ user2372976 Я не думаю, что понял. В чем причина его статичности? – stardust

+0

okey Позвольте мне подумать об использовании статических и нестатических функций: D – user2372976

Смежные вопросы