c++ - C++,没有匹配的函数调用错误
问题描述
初级CS学生在这里,挣扎了很多。
这是我得到的错误:
main.cpp:45:18: error: no matching function for call to ‘yerlesimBirimi::isimAta()’
obj1.isimAta();
^
下面是我的代码。你能帮我看看我做错了什么吗?
#include <stdio.h>
#include <iostream>
using namespace std;
class yerlesimBirimi {
public:
string isim;
int nufus;
int dogumSayisi, olumSayisi;
void isimAta (string _isim){
cin >> _isim;
isim = _isim;
}
void nufusAta (int _nufus){
cin >> _nufus;
nufus = _nufus;
}
void dogumAta (int _dogumSayisi){
cin >> _dogumSayisi;
dogumSayisi = _dogumSayisi;
}
void olumAta (int _olumSayisi){
cin >> _olumSayisi;
olumSayisi = _olumSayisi;
}
double dogumOrani();
double olumOrani ();
};
double yerlesimBirimi::dogumOrani(){
return dogumSayisi/nufus;
}
double yerlesimBirimi::olumOrani(){
return olumSayisi/nufus;
}
int main (){
yerlesimBirimi obj1;
cout << "Yerlesim biriminin ismini giriniz:";
obj1.isimAta();
cout << "Nufusunu giriniz:";
obj1.nufusAta();
cout << "Dogum sayisini giriniz:";
obj1.dogumAta();
cout << "Olum sayisini giriniz:";
obj1.olumAta();
cout << obj1.isim << "--- Dogum Orani:" << obj1.dogumOrani << endl;
cout << obj1.isim << "--- Olum Orani" << obj1.olumOrani << endl;
yerlesimBirimi obj2;
cout << "Yerlesim biriminin ismini giriniz:";
cin >> obj2.isim;
cout << "Nufusunu giriniz:";
cin >> obj2.nufus;
cout << "Dogum sayisini giriniz:";
cin >> obj2.dogumSayisi;
cout << "Olum sayisini giriniz:";
cin >> obj2.olumSayisi;
cout << "------------- Dogum Orani:" << obj2.dogumOrani<<endl;
cout << "------------- Olum Orani:" << obj2.olumOrani<<endl;
}
解决方案
您将 、 、 和 class 方法定义isimAta()
为nufusAta()
都dogumAta()
采用olumAta()
输入参数,但实际上您并没有为这些参数传递任何值,例如:
void isimAta (string _isim){ // <-- requires an input value!
cin >> _isim;
isim = _isim;
}
obj1.isimAta() // <-- no value passed in!
这就是您收到编译器错误的原因。
您使用参数的方式,它们需要改为局部变量,例如:
void isimAta (){ // <-- no parameter!
string _isim; // <-- local variable instead!
cin >> _isim;
isim = _isim;
}
void nufusAta (){ // <-- no parameter!
int _nufus; // <-- local variable instead!
cin >> _nufus;
nufus = _nufus;
}
void dogumAta (){ // <-- no parameter!
int _dogumSayisi; // <-- local variable instead!
cin >> _dogumSayisi;
dogumSayisi = _dogumSayisi;
}
void olumAta (){ // <-- no parameter!
int _olumSayisi; // <-- local variable instead!
cin >> _olumSayisi;
olumSayisi = _olumSayisi;
}
这将修复编译器错误。
但是,后面说,您实际上根本不需要那些局部变量。您可以直接读入您的班级成员,例如:
void isimAta (){
cin >> isim;
}
void nufusAta (){
cin >> nufus;
}
void dogumAta (){
cin >> dogumSayisi;
}
void olumAta (){
cin >> olumSayisi;
}
推荐阅读
- java - 删除了证书并在密钥库中插入了新证书并收到错误 SSL 版本不匹配
- javascript - 在 JavaScript 中我需要什么 return 语句?
- mysql - 如何在 mysql 的计算列中使用 MAX/MIN 函数?
- python - 例外:仅记录一次回溯
- bash - 用于网络适配器、IP 地址和 Mac 地址的 Raspberry Pi Bash 脚本
- java - 动态生成多个 from() Apache Camel RouteBuilder
- colors - libgdx 多边形精灵批量绘制填充多边形
- swift - AdMob 7.51 导致 Xcode 11 崩溃
- python - 增加行中条件值的计数
- c++ - 在 C++ 解释中比较和交换库(对我来说似乎不起作用)