2014-01-05 2 views
0

У меня возникли проблемы с пониманием того, что компилятор жалуется на этот фрагмент кода.Unvalid использование нестатического элемента данных

template<typename T> struct sEventColl { 
T __d__; 
list<string> event_list; 


sEventColl(T d, const string& eventStr) : 
     __d__(d) { 
    event_list.push_back(eventStr); 
} 

template<typename U> 
sEventColl(const sEventColl<U>& other) { 
    __d__ = other.__d__; 

    this->event_list.clear(); 

    for (typename list<string>::const_iterator it = 
      other.event_list.crbegin(); it != other.event_list.crend(); 
      it++) { 
     event_list.push_back(*it); 
    } 
} 

~sEventColl(){} 

bool operator<=(const T & d) const { 
    return ((d == __d__) || (__d__ < d)); 
} 

bool operator>=(const T & d) const { 
    return ((__d__ == d) || (__d__ > (d))); 
} 

bool removeEvent(string eventText) { 

    for (typename list<string>::iterator it = event_list.begin(); 
      it != event_list.end(); it++) { 
     if (*it == eventText) { 
      event_list.erase(it); 
      return true; 
     } 
    } 
    return false; 
} 

bool addEvent(const string event) { 

    /* Check if object already exist */ 
    for (typename list<string>::const_iterator it = event_list.begin(); 
      it != event_list.end(); it++) { 
     if (event == *it) 
      return false; 
    } 
    event_list.push_back(event); 
    return true; 
} 

bool isEmpty() { 
    return event_list.empty(); 
} 

friend ostream& operator<<(ostream & os, const sEventColl & ecoll) { 
    for (typename list<string>::const_iterator it = ecoll.cbegin(); 
      it != event_list.cend(); it++) { 
     os << __d__ << " : " << *it << endl; 
    } 
    return os; 
} 

};

выход из компилятора:

calendar.h: In function 'std::ostream& lab2::operator<<(std::ostream&, const lab2::sEventColl&)': calendar.h:49:16: error: invalid use of non-static data member 'lab2::sEventColl::event_list' calendar.h:110:11: error: from this location calendar.h:48:4: error: invalid use of non-static data member 'lab2::sEventColl::d' calendar.h:111:10: error: from this location

+0

Похож на ту же проблему, что и на этот вопрос: https://stackoverflow.com/questions/16002417/invalid-use-of-non-static-data-member-when-accessing-a-templated-class-field? rq = 1 –

+0

Я такой идиот, только что понял, что я действительно делал статический доступ к элементу данных на операторе << метод .., который решил мои проблемы –

+1

'__d__' - [зарезервированное имя.] (http: // stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier) –

ответ

0

решаемые это ..

В

friend ostream& operator<<(ostream & os, const sEventColl & ecoll) { 
for (typename list<string>::const_iterator it = ecoll.cbegin(); 
     it != event_list.cend(); it++) { 
    os << __d__ << " : " << *it << endl; 
} 
return os; 

}

Я должен был получить доступ членов через ссылку Ecoll!

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