В C++ структура и класс отличаются только уровнем доступа по умолчанию к их членам: для class он - private, для struct - public. Как и классы, структуры можно наследовать, можно объявлять в них методы. Структуры и классы разделяют общее пространство имён.
Поэтому если вы замените в объявлении структур struct на class и добавите в начале модификатор доступа public:, то всё должно заработать. Например, если было:
struct MyData {
int a;
string b;
}
То делаем так:
class MyData {
public:
int a;
string b;
}
Это, конечно, не в стиле ООП, который предписывает защищать данные и пользоваться только методами, обобщать интерфейсы и реализации, где надо, и где не надо, но честно говоря, этот подход настолько же бессмысленный, насколько и беспощадный. Если же вам ставят обязательное условие совершать эти ритуальные пляски, то реализуйте простые методы доступа (сеттеры и геттеры):
class MyData {
private:
int a;
string b;
public:
int getA() { return a; }
void setA(int a) { this->a = a; }
const string &getB() { return b; }
void setB(const string &b) { this->b = b; }
}
И обращайтесь к данным через эти методы.
Как общий принцип, я бы посоветовал держаться от ООП подальше. Он изначально пришёл из области разработки авиасимуляторов, более-менее хорошо вписался в разработку искусственных иерархий вроде фреймворков UI, но на них его область применения и закончилась. Сейчас индустрия, наконец, осознала это и отшвырнула ООП в сторону. В любом крупном современном проекте от ООП остались рожки да ножки в виде классов, методов, ритуальных сеттеров и геттеров, и одного уровня наследования (интерфейс-реализация). Так что изучение ООП и с ремесленной точки зрения не имеет особых перспектив, если только вы не собираетесь в будущем разрабатывать симуляторы.
Код программы С++