Это неверно (и не требуется):
dogCollection = new std::vector<Dog>; // Remove this line.
как dogCollection
не является std::vector<Dog>*
.
Это также неверно:
void Person::addDog(string dogName, string breed){
Dog *newDog = new Dog(dogName, breed);
dogCollection.push_back(newDog);
}
, поскольку dogCollection
содержит Dog
экземпляров, а не Dog*
. Изменить на:
void Person::addDog(string dogName, string breed){
dogCollection.push_back(Dog(dogName, breed));
}
Существует проблема со всеми конструкторами:
Person::Person(string name, string address, int age){
name=name;
address=address;
age=age;
}
Это присваивает аргумент name
себе: он не присваивает члену name
. То же самое для address
и age
и аналогично для конструкторов других классов. Использовать список инициализаторов:
Person::Person(string name, string address, int age) :
name(name),
address(address),
age(age)
{}
Этот метод не возвращает std::string
:
string Person::getDogInfo(int index){
}
EDIT:
Квалификатор отсутствующего класса:
std::vector<Dog> getDogs(){
return dogCollection; //dogCollection undefined error here
}
означает, что это просто бесплатная функция, без связи с классом Person
и, следовательно, без доступа к dogCollection
.
Изменить на:
std::vector<Dog> Person::getDogs(){
return dogCollection;
}