Проблема заключается в то, что этот участок кода работает нормально, но из-за него проблемы.
if (mode == 1)
{
Animal main_object;
}
else if (mode == 2)
{
Human main_object;
}
else
{
Cat main_object;
}
std::string name_object;
std::cin >> name_object;
main_object.set_name(name_object);
т.е. когда я обращаюсь к main_object
я получаю это :
main.cpp:185:2: ошибка: нет декларации «main_object» в этой области видимости
main_object.get_object()->set_name(name_object);
как это обойти это или какие костыли использовать?
p.s. h фаил классов
#ifndef ANIMAL_H
#define ANIMAL_H
#include <string>
class Animal
{
public:
Animal();
Animal(std::string name_arg, int year_arg);
~Animal();
protected: std::string name;
public:
std::string get_name();
void set_name(std::string name_arg);
protected: int year;
public:
virtual int get_year();
virtual void set_year(int year_arg);
virtual void show();
virtual void say_something();
};
class Human : public Animal
{
public:
Human();
Human(std::string name_arg, int year_arg);
Human(const Human& object);
~Human();
int get_year();
void set_year(int year_arg);
void show();
void say_something();
};
class Cat : public Animal
{
public:
Cat();
Cat(std::string name_arg, int year_arg);
Cat(const Cat& object);
~Cat();
int get_year();
void set_year(int year_arg);
void show();
void say_something();
};
#endif
Если мы имеем дело с иерархией, то можем легко обеспечить полиморфизм времени выполнения:
class Animal {
//...
public:
virtual void set_name(const std::string& s){ ...}
};
//...
Тогда легко сделать то, что вы задумали:
//...
Animal a; Human h; Cat c;
Animal* p;
if (mode == 1)
{
p = &a;
}
else if (mode == 2)
{
p = &h;
}
else
{
p = &c;
}
Animal& main_object = *p;
std::string name_object;
std::cin >> name_object;
main_object.set_name(name_object);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я выбрал tinyxml2 для парсинга XML файлов, хочу узнать как рекурсивно обойти элементы XML
Очень нужно собрать проект (библиотеки и исполняемые файлы) на Qt в виндовсе на линуксНашел в интернете про сборку с линукса на виндовс, но ничего...