0

コードの小さなスニペットを動作させようとしていますが、配列の割り当てが正しく機能していないようです。何が問題なのかを特定するためにあなたの専門家に依頼したいと思います。別のヘッダーと cpp ファイルを作成しました。そして、入力エラーで配列を埋めるためのメインcpp。

ヘッダー ファイルは postaH.h です。

#ifndef POST_H
#define POST_H
#include <string>
#include <iostream>
#include "senderH.h"
using namespace std;
class postH : virtual public senderH{
      private:
              int* nvalue;
              string* texts;
      public:
             postH();
             virtual ~postH();
             postH(postH&);
             void Nvalue(int,int,int, int, int,int, int);
             void Texts(string,string,string,string,string,string,string);
};
#endif

cpp ファイルは postaS.cpp です。

#include <string>
#include <iostream>
#include <fstream>
#include "postH.h"


using namespace std;

postH::postH(){
}

postH::postH(postH& pos){
   nvalue = new int[8];
   texts = new string[8];
}

postH::~postH(){
                  delete [] nvalue;
                  delete [] texts;
}

void postH::Nvalue(int ir,int hsz,int szulev, int cir, int chsz,int surg, int suly){
     nvalue[0] = ir;
     nvalue[1] = hsz;
     nvalue[2] = szulev;
     nvalue[3] = cir;
     nvalue[4] = chsz;
     nvalue[5] = surg;
     nvalue[6] = suly;
     nvalue[7] = 0;
}

void postH::Texts(string nev,string varos,string utca,string cnev,string     cvaros,string cutca,string cstipus){
     texts[0] = nev;
     texts[1] = varos;
     texts[2] = utca;
     texts[3] = cnev;
     texts[4] = cvaros;
     texts[5] = cutca;
     texts[6] = cstipus;
     texts[7] = ";";
}

したがって、メインの cpp は次のとおりです。

#include<iostream>
#include<string.h>
#include<stdio.h>
#include "senderH.h"
#include "postH.h"
using namespace std;

int main() {
    postH post1;
    senderH send1;
    int b;
    string input,a,quit = "q",inp1="package",inp2="alrsent";
    while(input < quit){
    cout<<"\nwelcome to the automated post office!!\n"<<endl;
    cout<<"For starting a send procedure please type |package|! For a list of sent     mails/packages type |alrsent|:"; cin >> feladat;
    if(input == inp1)    {
         cout<<"Nev: "; cin >> a;
         send1.setNev(a);
         cout<<"Varos: "; cin >> a;
         send1.setVaros(a);
         cout<<"Utca: "; cin >> a;
         send1.setUtca(a);
         cout<<"IR_szam: "; cin >> b;
         send1.setIR_szam(b);
         cout<<"Hazszam: "; cin >> b;
         send1.setHazszam(b);
         cout<<"Szul_ev: "; cin >> b;
         send1.setSzul_ev(b);
         cout<<"Cimzett Nev: "; cin >> a;
         send1.setC_Nev(a);
         cout<<"Cimzett IR_szam: "; cin >> b;
         send1.setC_IR(b);
         cout<<"Cimzett Varos: "; cin >> a;
         send1.setC_Varos(a);
         cout<<"Cimzett Utca: "; cin >> a;
         send1.setC_Utca(a);
         cout<<"Cimzett Hazszam: "; cin >> b;
         send1.setC_Hazszam(b);
         cout<<"Csomag tipus: "; cin >> a;
         send1.setCS_Tipus(a);
         cout<<"Csomag Surgosseg: "; cin >> b;
         send1.setSurgosseg(b);
         cout<<"Csomag Suly: "; cin >> b;
         send1.setCS_Suly(b);

             post1.Nvalue(send1.getIR_szam(),send1.getHazszam(),send1.getSzul_ev(),send1.getC_IR(),send1    .getC_Hazszam(),send1.getSurgosseg(),send1.getCS_Suly());
               }
    system( "PAUSE" );
    return 0;
}}

配列を他のファイルからの入力で埋めるはずの void Nvalue/Texts のメイン呼び出しですが、代わりに勝利エラーで終了します。

4

1 に答える 1

1

あなたは3 つのルールに従っていません。動的に割り当てられたメンバーのディープ コピーを作成 するコピー代入演算子コピー コンストラクター
を提供する必要があります。

正直なところ、おそらく、std::vector動的メモリ割り当てメンバーよりもメンバーとして使用する方がはるかに優れています。

また、オブジェクトを構築できるすべてのコンストラクターに動的メモリを割り当てていることを確認してください。示されているコードでは、引数を取らないコンストラクターは、単にポインター メンバーにメモリを割り当てません。

于 2012-12-02T14:02:44.410 に答える