2016-07-07 10 views
0

Ich habe an einigen Stellen bereits nach einer Lösung für dieses Problem gesucht und bin kurz gekommen. Im Wesentlichen möchte ich ein const 1D-Array aus einer der Zeilen eines const 2d-Arrays zuweisen und dies speziell in einer Header-Datei tun.Assig const 1D Array aus const 2D Array Zeile innerhalb einer Header-Datei C++

Say I

haben
const int Arr1[2][3] = {{1,2,3},{4,5,6}}; 

und ich möchte ein Array initialisiert werden (innerhalb einer Header-Datei) aus diesem Array. Ich weiß, normalerweise hätte ich tun:

const int *Arr2 = Arr1[1]; 

oder

const int *Arr2 = Arr1[0]; 

aber so in einer Header-Datei gibt Fehler mehr Definitionen zu tun. Also meine Frage ist, ob es einen schönen Weg gibt, dies zu tun.

Antwort

2

Die Mehrfachdefinition Fehler haben nichts mit Ihrer Aufgabe zu tun.

Sagen Sie einfach in Ihrem Header

extern const int *Arr2; 

und es in einer separaten Übersetzungseinheit initialisieren:

const int Arr1[2][3] = {{1,2,3},{4,5,6}}; 
const int *Arr2 = Arr1[1]; 

Vielleicht selektiv aus Präprozessordirektiven:

const int Arr1[2][3] = {{1,2,3},{4,5,6}}; 
#ifdef ZERO_PATH 
const int *Arr2 = Arr1[0]; 
        //^ZERO_PATH 
#else 
const int *Arr2 = Arr1[1]; 
#endif 
0

Ihr Code :

const int *Arr2 = Arr1[1]; 

initialisiert einen Zeiger, kein Array. Arrays und Zeiger sind unterschiedlich. Es ist nicht klar aus Ihrem Post, ob Sie mit der Verwendung eines Zeigers zufrieden sind, aber wenn dies der Fall ist, müssen Sie entweder wie in πάντα ῥεῖ's Antwort einrichten; oder gibt Arr2 interne Bindung:

const int *const Arr2 = Arr1[1]; // if you do not plan to change Arr2 
static const int *Arr2 = Arr1[1]; // if you do 

Um tatsächlich ein Array verwenden Sie schreiben können:

const int Arr2[3] = { Arr1[1][0], Arr1[1][1], Arr1[1][2] }; 

Es gibt keine Möglichkeit, einen ganzen C-Stil-Array als Initialisierer für ein anderes Array von dem zu verwenden dieselbe Art. Aber wenn Sie Arrays im C++ - Stil verwenden, können Sie Folgendes tun:

const array<array<int, 3>, 2> Arr1 = {{ {1,2,3},{4,5,6} }}; 

const array<int, 3> Arr2 = Arr1[0];