c++ - 为什么我会收到“无匹配功能”错误?
问题描述
对 C++ 来说非常新,我得到的任务基本上是关于使用两个不同的类,但是在创建我的头文件和 C++ 文件并尝试编译时,我收到一个错误,读取没有匹配函数调用'Owner::Owner( )'。由于我对 C++ 不是很熟悉,但我假设这个问题与我的构造函数以及我尝试调用它们的方式有关,我的分配详细说明了我认为我的问题是什么,但我无法准确理解是什么需要完成。我将提供有关该问题的分配详细信息,以及下面的代码和编译错误。对不起,我刚刚被这个问题困扰了一段时间,我似乎无法找到解决方案。
构造函数'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 方法。Owner 的类属性必须在创建时设置(在 Owner 的构造函数中)。您将从 Dog 的构造函数内部调用 Owner 的构造函数。不要忘记在 Dog 类的每个构造函数中执行此操作。
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
所有者.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();
}
所有者.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。
推荐阅读
- javascript - 将 blob url 转换为 FormData() 的上传文件并通过 AJAX 将其发送到 PHP 文件
- .net-core - 如何在 ASP .Net Core 3 中使用 UseRequestLocalization?
- swift - Firebase 项目在数据库更改的集合视图中多次返回
- json - 我有 sql 数据框如何将其转换为所需的 json 格式
- awk - 检查文件中的多行内容
- c# - 带有异步 Task.Run 方法的死锁,带有来自 Synchronus 方法的 Wait 和超时
- c# - 在图像的特定位置显示对象
- java - 自动装配注释 bean 在侦听器类中为空
- c++ - Changed value through set function but; value not changing when called
- r - 如果在闪亮数据表的行中的任何位置存在条件,是否可以获得 formatStyle