我必须为大学做一个计划。
我在问题陈述中已经声明了3个类。 头等舱:
class piesa_a{
protected:
int id;
char *tip;
int pret;
};
第二课:
class piesa_b:public piesa_a
{
private:
float lungime;
bool bw;
};
第三课:
class piesa_c:public piesa_a
{
private:
int nr;
piesa_b *buf;
};
在main中我需要创建一个数组,用于存储piesa_a,piesa_b,piesa_c等项目。然后我必须按价格对物品进行分类。
到目前为止我有这段代码: http://pastebin.com/nx2FGSfe
程序不完整,因为它不会显示数组中的每个项目。
我被困在这里。但是如果你在它们之外显示数组的元素,它就会起作用。
简短:第143行出错,我想解决。
main.cpp:143:18: error: request for member ‘afisare’ in ‘*(v + ((unsigned int)(((unsigned int)i) * 4u)))’, which is of non-class type ‘piesa_a*’
代码在这里:
#include <cstdlib>
#include<iostream>
#include<string.h>
using namespace std;
class piesa_a{
protected:
int id;
char *tip;
int pret;
public:
piesa_a()
{
id = 0;
tip = new char[1];
pret = 0;
}
piesa_a(int aidi, char *typ, int pretz)
{
id = aidi;
tip = new char[strlen(typ)+1];
strcpy(tip,typ);
pret = pretz;
}
piesa_a&operator =(piesa_a alta)
{
id = alta.id;
tip = new char[strlen(alta.tip)+1];
strcpy(tip,alta.tip);
pret = alta.pret;
return *this;
}
virtual void afisare()
{
cout<<"\n Piesa A: "<<id<<" "<<tip<<" "<<pret;
}
};
class piesa_b:public piesa_a
{
private:
float lungime;
bool bw;
public:
piesa_b():piesa_a(){lungime = 0;bw = 0;}
piesa_b(float lg,bool bl, int aid, char *tipi, int pretzz):piesa_a(aid,tipi,pretzz)
{
lungime = lg;
bw = bl;
}
piesa_b&operator =(piesa_b &c)
{
id = c.id;
tip = new char[strlen(c.tip)+1];
strcpy(tip,c.tip);
pret = c.pret;
lungime = c.lungime;
bw = c.bw;
return *this;
}
void afisare()
{
piesa_a::afisare();
cout<<"impreuna cu piesa B: "<<lungime<<" "<<bw<<"\n";
}
};
class piesa_c:public piesa_a
{
private:
int nr;
piesa_b *buf;
public:
piesa_c():piesa_a(){nr=0; buf = new piesa_b[nr];}
piesa_c(int n, piesa_b *bu,int aid, char *tipi, int pretzz):piesa_a(aid,tipi,pretzz)
{
nr = n;
buf = new piesa_b[nr];
for(int i=0;i<nr;i++)
buf[i]= bu[i];
}
piesa_c&operator =(piesa_c &alta)
{
id = alta.id;
tip = new char[strlen(alta.tip)+1];
strcpy(tip,alta.tip);
pret = alta.pret;
nr = alta.nr;
for(int i=0;i<alta.nr;i++)
buf[i] = alta.buf[i];
}
void afisare()
{
for(int i=0;i<nr;i++)
buf[i].afisare();
}
};
int main(int argc, char** argv) {
piesa_b *H;
H = new piesa_b[2];
piesa_a A(4,"TIPA",120);
piesa_b B(100,1,3,"TIPA",120);
H[0]=B;
H[1]=B;
piesa_c C(2, H,14,"TIPC",20);
piesa_a** v = new piesa_a*[3];
v[0] = &A;
v[1] = &B;
v[2] = &C;
for(int i=0;i<3;i++)
v[i].afisare();
return 0;
}
出了什么问题?
答案 0 :(得分:0)
在C ++(和当前的C)中,强制转换几乎总是标志着程序员不知道如何使用该语言,因为它应该被使用。如果你需要一个由3种类型的数据组成的数组,那么最干净的解决方案是一个基于3的类的对象数组。如果你想以不同的方式显示每个项目,你需要重载{{1}运算符,所以你只需遍历数组并在每个项目上运行<<
。按价格排序意味着该类包含价格字段,您使用标准模板库中的排序,通过仅比较价格的比较操作。