未定义的引用错误 - 类中的对象

时间:2013-06-29 17:40:29

标签: c++ class object

问题在于: 写三个基类,名为Voltmeter,Ammeter和ResistanceMeter。  Voltmeter类将具有成员函数volt,非默认构造函数,复制构造函数  和函数measureVolt()。   Ammeter类将具有成员函数amp,非默认构造函数,复制构造函数和   函数measureCurrent()。   ResistanceMeter类将具有成员函数抵抗,非默认构造函数,   复制构造函数和函数measureResistance()。   现在写一个类万用表   有电压表,电流表和电阻表的对象,因此它可以使用那些类的功能。

在我的解决方案中,编译器对我在类'万用表'中使用的每个对象说未定义的引用。代码如下:

#include<iostream>
#include<cstdio>
#include<string>

using namespace std;

class voltmeter{   //class - Voltmeter
    float volt;

public:

    voltmeter(); //default constructor
    voltmeter(float v){   //non default constructor
        volt = v;
    }

    voltmeter(voltmeter &ob) //copy constructor
    {
        volt = ob.volt;
    }

    void set_volt(float v)
    {
        volt = v;
    }
    float get_volt(void)
    {
        return volt;
    }
    void measure_volt(void) //measureVolt()
    {
        cout<<"Current volt in the circuit is: "<<volt<<"V"<<endl;
    }
};

class ameter
{
    float amp;
public:
    ameter();

    ameter(float a)
    {
        amp = a;
    }
    ameter(ameter &ob)
    {
        amp = ob.amp;
    }

    void measure_current(void)
    {
        cout<<"Current flow in circuit is: "<<amp<<"amp"<<endl;
    }

    void set_amp(float a)
    {
        amp = a;
    }
    float get_amp(void)
    {
        return amp;
    }

};

class res_meter //class - resistanceMeter
{
    float resistance;

public:
    res_meter();

    res_meter(float res)
    {
        resistance = res;
    }

    res_meter(res_meter &ob)
    {
        resistance = ob.resistance;
    }

    float get_resistance(void)
    {
        return resistance;
    }

    void set_resistance(float res)
    {
        resistance = res;
    }

    void meas_res(void)
    {
        cout<<"Current resistance in circuit is "<<resistance<<"ohm"<<endl;
    }

};

class multimeter
{
    res_meter r1;
    ameter a1;
    voltmeter v1;

public:
    multimeter(){
        r1.set_resistance(12.30);
        a1.set_amp(22.5);
        v1.set_volt(26.9);
    }
  //  ~multimeter();

    void show_info(void)
    {
        cout<<"Current Multimeter Status is as below: "<<endl;
        a1.measure_current();
        r1.meas_res();
        v1.measure_volt();
    }
};


int main()
{
    multimeter M;

    M.show_info();

    return 0;
}

2 个答案:

答案 0 :(得分:3)

您为所有类声明了一个默认构造函数(在multimeter类中使用),但您从未定义构造函数。

改变例如:

class voltmeter
{
    // ...

    voltmeter();

    // ...
};

class voltmeter
{
    // ...

    voltmeter() {}

    // ...
};

答案 1 :(得分:0)

  

在我的解决方案中,编译器对我在类'万用表'中使用的每个对象说未定义的引用。

更仔细地阅读您的警告信息。编译器告诉您multimeter默认构造函数(已定义)正在引用类ameterres_metervoltmeter'的默认构造函数。它是那些未定义的默认构造函数。

所以定义它们,或者使用你定义的非默认构造函数。