Две проблемы.
Как уже отмечали другие, имя класса совпадает с переменной.Я не уверен, что вы можете сделать это, или он даже скомпилируется.Моему компилятору это, конечно, не нравится.
Я предлагаю вам назвать ваши классы как начальные буквы в верхнем и верхнем регистре для каждого слова в классе.Все остальные буквы строчные.например, столкновения и оценка.или CompactDisk и т. д.
Вторая проблема заключается в том, что коллизии ничего не знают о балльной переменной, которую вы объявили глобально.
Что вам нужно сделать, это изменить конструктор коллизий, чтобы принятьссылочная переменная оценки:
class collisions
{
public:
collisions(score &score);
int lasers();
protected:
score& score_;
}
collisions(score& score)
: score_(score) { }
Теперь лазеры должны ссылаться на переменную члена оценки
score_.scored(100);
И вам необходимо изменить глобальные переменные следующим образом:
score the_score;
collisions the_collisions(the_score);
Это, конечно, при условии, что вам нужна только ОДНА копия копии партитуры.Если вам нужна одна копия Score для каждого класса коллизий, у вас не будет глобальной переменной Score, но вы просто удалите '&' из переменной-члена Score_ и удалите функцию конструктора, которая принимает ссылку.
И кстати.
score.scored(100); // wrong... doesn't know anything about score, not in scope yet.
score::scored(100); // wrong. scored member isn't declared as static.