2014-10-28 32 views
-9

的.cpp的初始化它说:“没有匹配的构造函数‘分数’

// 
// calculator.cpp 
// 
#include "Fraction.h" 
#include<iostream> 
#include<stdexcept> 
using namespace std; 

int main() 
{ 

    Fraction x,y; //ERROR IS RIGHT HERE. It says "No matching constructor for initialization of 'Fraction' 
    char op; 
    try 
    { 
     cin >> x; 
     cin >> op; 
     while (cin && (op == '+' || op == '-')) 
     { 
      cin >> y; 
      if (op == '+') 
       x = x + y; 
      else 
       x = x - y; 
      cin >> op; 
     } 
     cout << x << endl; 
    } 
    catch (invalid_argument& e) 
    { 
     cout << "Error: " << e.what() << endl; 
    } 
} 

.H

#ifndef Fraction_Calculator_Fraction_h 
#define Fraction_Calculator_Fraction_h 
#include<iostream> 
#include<cstdlib> 

//Fraction class definition 
class Fraction 
{ 
public: 

    Fraction (int a, int b); 
    int fraction(int a, int b); 
    void set(int, int); 
    int get_numerator(void); 
    int get_denomenator(void); 
    int find_gcd (int n1, int n2); 
    void reduce_fraction(int nump, int denomp); 
    Fraction& operator+(const Fraction& n); 
    Fraction& operator-(const Fraction& n); 
    friend std::ostream& operator<<(std::ostream &os, const Fraction& n); 
    friend std::istream& operator>>(std::istream &is, Fraction& n); 
    Fraction& operator= (const Fraction& n); 
    int denom; 
    int numera; 

private: 
    int numerator; 
    int denomenator; 
    int denomp; 
    int nump; 

}; 

#endif 

它说:”没有匹配的构造函数的‘分数’初始化上的第一行cpp文件 我不明白这是什么意思。

+1

在这种情况下,我们需要知道'Fraction.h'的内容,否则无法回答这个问题。 – hcs 2014-10-28 07:03:32

+0

在下次询问之前,请仔细阅读[这里](http://stackoverflow.com/help/asking)的信息。 – 2014-10-28 07:55:01

回答

0

提供默认构造函数,如 分数() 分子= 0; denomenator0; denomp0; nump = 0; }

1

问题是你的分数构造函数需要2个参数。

Fraction (int a, int b); 

,你与无

Fraction x,y; //ERROR IS RIGHT HERE. It says "No matching constructor for initialization of 'Fraction' 

您应该调用x和y与2个int参数或定义另一个构造不带任何参数调用它。

+0

我试过这个,但后来这个错误消息来了架构x86_64的未定义符号: “Fraction :: operator =(Fraction const&)”,引用来自: _main in calculator.o “operator <<(std :: __ 1 :: basic_ostream >&,Fraction const&)“,引用来自: _main in calculator.o _main in useFraction.o ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码1(使用-v查看调用) – warhol 2014-10-28 07:12:21

+0

您在Fraction类中的函数定义中缺少整个代码负载(至少您没有在此处发布)。您需要在头文件中内联定义它们,或者在类定义之外定义它们,最好在名为Fraction.cpp的文件中定义它们。 – 2014-10-28 07:18:53

+0

看看这里http://www.learncpp.com/cpp-tutorial/93-overloading-the-io-operators/了解如何实施您的运营商。 – 2014-10-28 07:24:40

相关问题