问题在于: 写三个基类,名为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;
}
答案 0 :(得分:3)
您为所有类声明了一个默认构造函数(在multimeter
类中使用),但您从未定义构造函数。
改变例如:
class voltmeter
{
// ...
voltmeter();
// ...
};
到
class voltmeter
{
// ...
voltmeter() {}
// ...
};
答案 1 :(得分:0)
在我的解决方案中,编译器对我在类'万用表'中使用的每个对象说未定义的引用。
更仔细地阅读您的警告信息。编译器告诉您multimeter
默认构造函数(已定义)正在引用类ameter
,res_meter
和voltmeter
'的默认构造函数。它是那些未定义的默认构造函数。
所以定义它们,或者使用你定义的非默认构造函数。