Невозможно инициализировать переменную типа «домашнее животное *» со значением типа «собака *». ⇐ C++
-
Anonymous
Невозможно инициализировать переменную типа «домашнее животное *» со значением типа «собака *».
Я создаю «систему зоомагазина» для школьного задания. Я оставлю полные инструкции под своим кодом, но краткое изложение таково:
Чтобы сделать это, мне нужно использовать такие понятия, как указатели, файлы заголовков, ООП и наследование. По сути, система берет домашнее животное, собаку или кошку, и отображает его имя и лицензионный сбор (который определяется весом домашнего животного: собака стоит 2 доллара за фунт, а кошка — 1,50 доллара за фунт).< /п> В моей функции main() я пытаюсь создать вектор указателей на класс pet, и меня просят создать 3 экземпляра домашних животных ; две собаки, одна кошка. Я пытаюсь сохранить каждый из их указателей в векторе.
Проблема в том, что я создаю их, используя классы собак и кошек, но хочу, чтобы они хранились как указатели на домашних животных. Я получаю эту ошибку, например, при попытке создать экземпляр собаки:
Невозможно инициализировать переменную типа «pet *» значением rvalue типа «dog *»
Я изменил pet* на dog*, но все, что произошло, это выдало другое сообщение об ошибке:
Нет соответствующей функции-члена для вызова push_back
Я не знаю, как решить эту проблему, чтобы можно было указать, какое животное является домашним животным, но сохраните их как указатели в моем векторе pvec.
Вот свернутые версии моих файлов (частей, на которых я сосредоточен), а также мои инструкции, подсказанные заданием:
main.cpp:
#include #include #include #include "pet.hpp" #include "dog.hpp" #include "cat.hpp" использование пространства имен std; интервал основной() { вектор pvec; //создает список указателей на домашних животных //создаем трех домашних животных для тестовой программы: двух собак и одну кошку pet* bob = новая собака("Боб", 65, 0.0); //использует конструкторы из класса Dog, устанавливая начальную цену равным 0 pvec.push_back(боб); //добавляет Боба в вектор pet* stan = новая собака("Стэн", 37, 0.0); pvec.push_back(стан); pet* tom = новый кот("Том", 12, 0.0); pvec.push_back(том); pet.cpp, который отражает файл заголовка pet
pet.hpp:
#ifndef pet_hpp #define pet_hpp #include использование пространства имен std; домашнее животное класса { публика: домашний питомец(); pet(имя строки, вес int, цена с плавающей запятой); void SetName (имя строки) { имя_питомца = имя; } строка GetName() { вернуть имя_питомца; } void SetWeight(int вес) { pet_weight = вес; } строка GetWeight() { вернуть имя_питомца; } void SetPrice(плавающая цена) { pet_price = цена; } статическое число с плавающей запятой GetPrice() { вернуть pet_price; }; частный: строка имя_питомца; интервал pet_weight; статическое плавающее значение pet_price; }; #endif //pet_hpp dog.cpp, который отражает заголовок собаки
dog.hpp:
#ifndef Dog_hpp #define Dog_hpp #include #include #include "pet.hpp" использование пространства имен std; классная собака: публичное домашнее животное { публика: собака(); собака(имя строки, вес int, цена с плавающей запятой); void SetName (имя строки) { имя_собаки = имя; } строка GetName() { вернуть имя_собаки; } void SetWeight(int вес) { Dog_weight = вес; } интервал GetWeight() { вернуть Dog_weight; } void SetPrice(плавающая цена) { собака_цена = цена; } поплавок GetPrice() { вернуть собака_цена; } статическая плавающая лицензия_ставка; частный: строка имя_собаки; INT Dog_weight; плавающая собака_цена; }; плавающая собака::licensing_rate = 2.0; //устанавливает цену для собак на уровне 2 долларов за фунт #endif //dog_hpp cat.cpp, который отражает заголовок кота
cat.hpp:
#ifndef cat_hpp #define cat_hpp #include #include "pet.hpp" использование пространства имен std; классный кот: публичное домашнее животное { публика: кот(); cat(имя строки, вес int, цена с плавающей запятой); void SetName (имя строки) { имя_кошки = имя; } строка GetName() { вернуть имя_кошки; } void SetWeight(int вес) { cat_weight = вес; } интервал GetWeight() { вернуть cat_weight; } void SetPrice(плавающая цена) { кот_цена = цена; } поплавок GetPrice() { вернуть cat_price; } статическая плавающая лицензия_ставка; частный: строка имя_кошки; интервал cat_weight; поплавок cat_price = cat_weight; }; float cat::licensing_rate = 1,50; #endif //cat_hpp Инструкции по заданию:
Зоомагазину необходимо следить за своими домашними животными, в том числе собаками и кошками. Каждый вид домашнего животного (собака, кошка) имеет ежемесячную лицензионную ставку, равную «за фунт» веса каждого домашнего животного. Магазину нужна система, которая отслеживала бы их питомцев и подсчитывала общую сумму, которую они платят в виде лицензионных сборов каждый месяц.
Вам необходимо спроектировать и построить такую систему. Ваша основная функция должна иметь цикл для расчета общей суммы комиссии, например:
float total_fee = 0.0; for (int i = 0; i < pvec.size(); i++) { cout GetName()
Я создаю «систему зоомагазина» для школьного задания. Я оставлю полные инструкции под своим кодом, но краткое изложение таково:
Чтобы сделать это, мне нужно использовать такие понятия, как указатели, файлы заголовков, ООП и наследование. По сути, система берет домашнее животное, собаку или кошку, и отображает его имя и лицензионный сбор (который определяется весом домашнего животного: собака стоит 2 доллара за фунт, а кошка — 1,50 доллара за фунт).< /п> В моей функции main() я пытаюсь создать вектор указателей на класс pet, и меня просят создать 3 экземпляра домашних животных ; две собаки, одна кошка. Я пытаюсь сохранить каждый из их указателей в векторе.
Проблема в том, что я создаю их, используя классы собак и кошек, но хочу, чтобы они хранились как указатели на домашних животных. Я получаю эту ошибку, например, при попытке создать экземпляр собаки:
Невозможно инициализировать переменную типа «pet *» значением rvalue типа «dog *»
Я изменил pet* на dog*, но все, что произошло, это выдало другое сообщение об ошибке:
Нет соответствующей функции-члена для вызова push_back
Я не знаю, как решить эту проблему, чтобы можно было указать, какое животное является домашним животным, но сохраните их как указатели в моем векторе pvec.
Вот свернутые версии моих файлов (частей, на которых я сосредоточен), а также мои инструкции, подсказанные заданием:
main.cpp:
#include #include #include #include "pet.hpp" #include "dog.hpp" #include "cat.hpp" использование пространства имен std; интервал основной() { вектор pvec; //создает список указателей на домашних животных //создаем трех домашних животных для тестовой программы: двух собак и одну кошку pet* bob = новая собака("Боб", 65, 0.0); //использует конструкторы из класса Dog, устанавливая начальную цену равным 0 pvec.push_back(боб); //добавляет Боба в вектор pet* stan = новая собака("Стэн", 37, 0.0); pvec.push_back(стан); pet* tom = новый кот("Том", 12, 0.0); pvec.push_back(том); pet.cpp, который отражает файл заголовка pet
pet.hpp:
#ifndef pet_hpp #define pet_hpp #include использование пространства имен std; домашнее животное класса { публика: домашний питомец(); pet(имя строки, вес int, цена с плавающей запятой); void SetName (имя строки) { имя_питомца = имя; } строка GetName() { вернуть имя_питомца; } void SetWeight(int вес) { pet_weight = вес; } строка GetWeight() { вернуть имя_питомца; } void SetPrice(плавающая цена) { pet_price = цена; } статическое число с плавающей запятой GetPrice() { вернуть pet_price; }; частный: строка имя_питомца; интервал pet_weight; статическое плавающее значение pet_price; }; #endif //pet_hpp dog.cpp, который отражает заголовок собаки
dog.hpp:
#ifndef Dog_hpp #define Dog_hpp #include #include #include "pet.hpp" использование пространства имен std; классная собака: публичное домашнее животное { публика: собака(); собака(имя строки, вес int, цена с плавающей запятой); void SetName (имя строки) { имя_собаки = имя; } строка GetName() { вернуть имя_собаки; } void SetWeight(int вес) { Dog_weight = вес; } интервал GetWeight() { вернуть Dog_weight; } void SetPrice(плавающая цена) { собака_цена = цена; } поплавок GetPrice() { вернуть собака_цена; } статическая плавающая лицензия_ставка; частный: строка имя_собаки; INT Dog_weight; плавающая собака_цена; }; плавающая собака::licensing_rate = 2.0; //устанавливает цену для собак на уровне 2 долларов за фунт #endif //dog_hpp cat.cpp, который отражает заголовок кота
cat.hpp:
#ifndef cat_hpp #define cat_hpp #include #include "pet.hpp" использование пространства имен std; классный кот: публичное домашнее животное { публика: кот(); cat(имя строки, вес int, цена с плавающей запятой); void SetName (имя строки) { имя_кошки = имя; } строка GetName() { вернуть имя_кошки; } void SetWeight(int вес) { cat_weight = вес; } интервал GetWeight() { вернуть cat_weight; } void SetPrice(плавающая цена) { кот_цена = цена; } поплавок GetPrice() { вернуть cat_price; } статическая плавающая лицензия_ставка; частный: строка имя_кошки; интервал cat_weight; поплавок cat_price = cat_weight; }; float cat::licensing_rate = 1,50; #endif //cat_hpp Инструкции по заданию:
Зоомагазину необходимо следить за своими домашними животными, в том числе собаками и кошками. Каждый вид домашнего животного (собака, кошка) имеет ежемесячную лицензионную ставку, равную «за фунт» веса каждого домашнего животного. Магазину нужна система, которая отслеживала бы их питомцев и подсчитывала общую сумму, которую они платят в виде лицензионных сборов каждый месяц.
Вам необходимо спроектировать и построить такую систему. Ваша основная функция должна иметь цикл для расчета общей суммы комиссии, например:
float total_fee = 0.0; for (int i = 0; i < pvec.size(); i++) { cout GetName()
Мобильная версия