Здесь, похоже, есть 2 основные проблемы. Ошибка, которую вы получаете, заключается в том, как вы звоните addSchool()
. Вы используете синтаксис для вызова статической функции, когда она объявлена как член. Чтобы назвать его как член:
school.addSchool(newSchool);
Обратите внимание, что вместо ::
используется .
, но также указывается, что newSchool уже является указателем, поэтому не берите его адрес. (Как уже отмечали другие)
Другие проблемы - ошибки времени выполнения в вашем методе addSchool. Вы создаете локальный вектор, не используя член. Вы также игнорируете отправленный параметр.
void school::addSchool(school *s) {
for( i=0; i < s->size(); i++) {
this.schools.push_back(s[i]);
}
}
Теперь, когда я это записываю, я понимаю, что здесь есть и еще одна логическая проблема в том, каким на самом деле должен быть этот класс. Это школа, которая содержит список школ, так что вы добавляете школу в этот список или комбинируете списки? В то время как такие вещи имеют смысл для списков ссылок и деревьев, ваш пример говорит "школы", поэтому я бы переосмыслил это. Возможно, ваш класс должен быть школьным округом и содержать список школ:
class District{
private:
vector<school *> schools; // school declared elsewhere
public:
District();
inline int Size() { return this.schools.size(); };
inline int Get(int i) { return this.schools[i]; };
void addSchool(school *s);
void addSchools(District *d);
}
// adding to the list
void District::addSchool(school *s) {
this.schools.push_back(s);
}
// adding the contents of another like class, consider operator overloading + instead
void District::addSchools(District *d) {
for( i=0; i < d->Size(); i++) {
this.schools.push_back( d->Get(i) );
}
}
В качестве альтернативы, если вы хотите использовать одну статическую функцию в качестве основного списка, найдите шаблон проектирования Singleton .