2016-10-09 3 views
-1

Ich muss einen Kopierkonstruktor für mein Objekt erstellen, die wie folgt aussehen;Kopieren eines Arrays von int *

class DTable { 
private: 
    std::string s_name; 
    int* *array; 
    int size; 

public: 
    DTable(); 
    DTable(std::string sName); 
    DTable(DTable &pcOther); 
    ~DTable(); 

    void vSetName(std::string sName); 
    std::string info(); 
    int getValue(int index, bool &ok); 
    bool setValue(int index, int val); 

    const int defaultArrSize = 10; 
    const std::string defaultArrName = "Default Name"; 
}; 

Hier Array-Variable zeigt auf Array von int *. Copy constructor kam mir so vor;

Das Problem ist, dass ich Werte des spitzigen int-Arrays nicht auf ein anderes Array kopieren kann. Lösung wie diese lässt mich mit Fehler

Ausdruck Zeiger auf Elementtyp

Auch

array[i] = pcOther.array[i]; 

falsch ist, denn das ist nur Kopien Referenzen, so dass nach Änderung eines Objekts haben muss, Kopie davon wird auch geändert werden. Ich möchte das vermeiden.

Ich würde gerne andere Struktur für diese verwenden, aber es hat sich dynamisch zugeteilt werden Array von int *

+3

Verwenden Sie ein 'std :: vector ' und Sie sind fertig. –

+0

Sie müssen beschreiben, was Sie mit "Array" darstellen möchten. Ja, ich weiß, es ist ein Zeiger auf einen Zeiger. Aber wofür verwenden Sie es? Ein 2D-Array? Ein Array von Zeigern, die jeweils auf ein einzelnes "int" zeigen? Oder was? Meine Annahme ist, dass die Anweisung '* array [i] = pcOther. * Array [i]' neu geschrieben werden muss als '* (array [i]) = * (pcOther.array [i])' aber - da ist es nicht klar, was Sie erreichen wollen - das ist nur eine Vermutung. – Peter

+0

Sie wären besser mit einem Standard-Container. Aber das hilft Ihnen nicht, das Problem in Ihrem Code zu verstehen. – Peter

Antwort

0

Sie die memcpy() verwenden,

void * memcpy (void * destination, const void * source, size_t num); 

oder

*array[i] = *(pcOther.array[i]) 

für zB

DTable::DTable(DTable & pcOther) { 
    s_name = pcOther.s_name + "_copy"; 
    size = pcOther.size; 
    array = new int*[size]; 
    for (int i = 0; i < size; i++) { 
     array[i] = new int; 
     *array[i] = *(pcOther.array[i]); 
     // or 
     memcpy (array[i], pcOther.array[i] , sizeof(int)*1); 
    } 
}