gpt4 book ai didi

c++ - 为什么我收到 "no matching function"错误?

转载 作者:行者123 更新时间:2023-12-02 02:11:59 27 4
gpt4 key购买 nike

对 C++ 来说相当陌生,我收到的作业基本上是关于利用两个不同的类,但是当创建我的头文件和 C++ 文件并尝试编译时,我收到一个错误,内容为没有匹配的函数可以调用'Owner::Owner()'。由于我对 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 图所示。请注意,在我们的设计中,每只 Dog 都有一个 Owner 类成员。如上所述,类所有者是不可变的。不可变类只是在对象实例化后其成员不能更改(变异)的类。因此,Owner 类没有任何 setter 方法。所有者的类属性必须在创建时设置(在所有者的构造函数中)。您将从 Dog 的构造函数内部调用 Owner 的构造函数。不要忘记在 Dog 类的每个构造函数中执行此操作。

UML Diagram

Dog.h 文件

#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

Owner.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

Dog.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();
}

Owner.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();
}

最佳答案

这里的问题是你没有接收 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();
}
...

注意:我不知道你为什么在构造函数中调用 getter。

关于c++ - 为什么我收到 "no matching function"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60312256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com