0

私は大学のためのプログラムをしなければなりません。

問題のステートメントで既に宣言されている 3 つのクラスがあります。ファーストクラス:

class piesa_a{
    protected:        
        int id;
        char *tip;
        int pret;
};

セカンドクラス:

class piesa_b:public piesa_a
{    
    private:
        float lungime;
        bool bw;
};

3 番目のクラス:

class piesa_c:public piesa_a
{    
    private:
        int nr;
        piesa_b *buf;
};

主に、piesa_a、piesa_b、piesa_c などの項目を格納する配列を作成する必要があります。次に、アイテムを価格順に並べ替える必要があります。

私はこれまでにこのコードを持っています: http://pastebin.com/nx2FGSfe

配列内の各項目を表示しないため、プログラムは不完全です。

ここで行き詰まりました。ただし、配列の要素が配列の外側にあるときに表示すると、機能します。

SHORT: 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;
}

どうしたの?

4

1 に答える 1