Почему я получаю сообщение об ошибке «Нет соответствующей функции»? - PullRequest
3 голосов
/ 20 февраля 2020

Довольно новый для C ++, мне было дано задание, которое в основном касается использования двух разных классов, однако при создании моих заголовочных файлов и файлов c ++ и попытке компилирования я получаю сообщение об ошибке: нет соответствующей функции для вызова 'Владелец :: Владелец () . Так как я не очень знаком с C ++, я предполагаю, что эта проблема связана с моими конструкторами и способом, которым я пытаюсь их вызывать, мое назначение подробно описывает то, о чем я думаю, но моя проблема заключается в том, чтобы понять, что именно должно быть сделано. Ниже я приведу подробные сведения о назначении, а также код и ошибку компиляции. Извините за всю информацию, которую я только что застрял с этой проблемой на некоторое время, и я не могу найти решение.

Compilation Error Image

Транскрибированная ошибка В конструкторе 'Dog :: Dog (std :: __cxx11 :: string, int)': Dog. cpp: 23: 46: ошибка: нет подходящей функции для вызова ' Owner :: Owner () 'Dog :: Dog (std :: string unsetBreed, int unsetAge) {

Сведения о назначении

Теперь вы напишет программу, которая состоит из двух классов, класса Dog и класса Owner. Их спецификация показана на диаграмме UML ниже. Обратите внимание, что в нашем дизайне у каждой собаки есть член класса Owner. Владелец класса является неизменным, как упомянуто выше. Неизменяемый класс - это просто класс, члены которого не могут быть изменены (видоизменены) после создания объекта. Следовательно, класс Owner не имеет никаких методов установки. Атрибуты класса владельца должны быть установлены во время создания (в конструкторе владельца). Вы будете вызывать конструктор Владельца из конструктора Собаки. Не забудьте сделать это внутри каждого конструктора в классе Dog.

UML Diagram

Dog.h File

#ifndef DOG_H_INCLUDED
#define DOG_H_INCLUDED

#include <iostream>
#include "Owner.h"


class Dog {
//-----------------------//
  private:
    std::string breed;
    int age;
    Owner owner;
    static int dogCount;
//-----------------------//
  public:
    Dog();
    Dog(std::string, int);
    std::string getBreed();
    int getAge();
    void setBreed(std::string);
    void setAge(int);
    void printDogInfo();
    int getDogCount();
};
#endif // DOG_H_INCLUDED

Владелец.h Файл

#ifndef OWNER_H_INCLUDED
#define OWNER_H_INCLUDED
#include <iostream>

class Owner {
//-----------------------//
  private:
    std::string name;
    int age;
//-----------------------//
  public:
    Owner(std::string, int);
    std::string getName();
    int getAge();
//-----------------------//
};


#endif // OWNER_H_INCLUDED

Собака. cpp Файл

#include <iostream>
#include "Owner.cpp"
#include "Owner.h"
#include "Dog.h"

//---------------SETTERS------------------//
void Dog::setBreed(std::string dogBreed){dogBreed = breed;}
void Dog::setAge(int dogAge){dogAge = age;}





//--------------GETTERS------------------//
std::string Dog::getBreed(){return breed;}
int Dog::getAge(){return age;}
int Dog::getDogCount(){return dogCount;}




//--------------OTHERS-------------------//
Dog::Dog(std::string unsetBreed, int unsetAge){
  Owner::Owner(std::string unsetName, int unsetOwnerAge);
  Dog::setBreed(unsetBreed);
  Dog::setAge(unsetAge);
}

void Dog::printDogInfo(){
  Dog::getBreed();
  Dog::getAge();
}

Владелец . cpp Файл

#include <iostream>
#include "Owner.h"
#include "Dog.h"

//--------------GETTERS------------------//
int Owner::getAge(){return age;}
std::string Owner::getName(){return name;}


//--------------OTHERS-------------------//
Owner::Owner(std::string unsetName, int unsetOwnerAge){
  Owner::getName();
  Owner::getAge();
}

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

Проблема в том, что у вас нет конструктора, который получает 0 параметров. У вас есть 2 варианта:

1 - Определить другой конструктор:

//header file
class Owner {
...
  public:
    Owner(std::string, int);
    Owner();
...
};
//cpp file
...
Owner::Owner(){
  name = "Jhon Doe";
  age = 18;
}
...

2 - Определить параметры по умолчанию:

//header file
class Owner {
...
  public:
    Owner(std::string unsetName = "John Doe", int unsetAge = 18);
...
};
//cpp file
...
Owner::Owner(std::string unsetName = "John Doe", int unsetAge = 18);
  Owner::getName();
  Owner::getAge();
}
...

Примечание: I не знаю, почему вы вызываете getter в конструкторах.

0 голосов
/ 20 февраля 2020

Похоже, у вашего Owner класса нет конструктора по умолчанию, в который входит Owner::Owner() конструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...