首页 > 解决方案 > 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;
}

标签: c++c++11visual-c++c++14

解决方案


您将 、 、 和 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;
}

推荐阅读