显示功能不起作用
The display function does not work
我有3个类。
class piesa_a{
protected:
int id;
char *tip;
int pret;
public:
[custructor with/without param, display function - works well each one of it]
class piesa_b:public piesa_a
{
private:
float lungime;
bool bw;
public:
[custructor with/without param, display function - works well each one of it]
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)
{
buf = new piesa_b[nr];
for(int i=0;i<nr;i++)
buf[i]= bu[i];
}
void afisare()
{
cout<<nr;
}
总的来说,我有这个:
piesa_c C(2, H,14,"TIPC",20);
C.afisare();
但这行不通。我不知道"buf"是否正确声明,因为问题似乎在最后一堂课上。为什么?
后期编辑:整个代码在这里:http://pastebin.com/nx2FGSfe。
现在,我主要有这个
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;
}
显示函数返回此错误
main.cpp:143:14: error: request for member ‘afisare’ in ‘*(v + ((unsigned int)(((unsigned int)i) * 4u)))’, which is of non-class type ‘piesa_a*’
nr
未在 piesa_c()
构造函数中初始化,这意味着它将具有未定义的值。
不使用动态分配的数组,而是使用std::vector<piesa_b>
。它将处理动态内存分配,并在复制piesa_c
实例时执行正确的操作。使用 std::vector
还意味着可以省略 nr
成员变量,因为可以从vector::size()
获取信息,并且可以在初始值设定项列表中而不是在构造函数主体中填充std::vector
:
std::vector<piesa_b> buf;
piesa_c(int n,
piesa_b *bu,
int aid,
char* tipi,
int pretzz) : piesa_a(aid,tipi,pretzz),
buf(bu, bu + nr) {}
并在buf
中的每个元素上调用成员函数:
// C++11 lambda, otherwise use
// std::vector<piesa_b>::const_iterator.
//
std::for_each(buf.begin(), buf.end(), [](piesa_b& pb) { pb.afisare(); });
如果afisare()
不修改,则使其为:
void afisare() const
{
}
此外,使用 std::string
而不是 char*
。如果你坚持在类中动态分配成员,你需要遵守三规则。
我不确定在这种情况下"不起作用"是什么意思,但是当您调用此构造函数时:
piesa_c C(2, H,14,"TIPC",20);
未设置数据成员nr
。它可以具有适合 int 的任何值,因此当您使用它来初始化数组时,您将获得变量和奇怪的结果。
请注意,通过使用 std::vector
和 std::string
而不是动态分配的数组和char*
,您可以省去很多麻烦。
相关文章:
- 为什么我的打印功能不起作用?链表
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 我做错了什么?GetDiskFreeSpaceExA的功能根本不起作用
- 虚拟功能不起作用
- C++插入排序错误功能不起作用
- 使用链表.为什么我的插入功能不起作用?
- 功能指针不起作用(C )
- 为什么功能对我不起作用?C
- C 所有质数功能不起作用
- 朋友功能不起作用(语法错误)
- Winpcap:暂停/停止嗅探pcap_breakloop功能不起作用
- 我的模板功能具有通用引用不起作用
- C 类是功能不起作用的参数
- 现在将功能从主型到原型不起作用
- 排序功能不起作用
- TIM6,基本时间生成功能不起作用
- 功能调用不起作用,但控制台仍允许输入
- 二进制树级别明智的打印功能不起作用
- glutkeyboardfunc呼叫功能不起作用
- 为什么COUT在朋友函数中不起作用,该功能超载了操作员&lt;&lt;这是一个iStream运算符