Hello am having some problems understanding what it is the compiler complains about for this snippet of code.
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;
}
};
Output from compiler:
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
