2017-08-31 3 views
0
class Node { 
public: 
    float point[3]; 
}; 

int main(int argc, char** argv) { 
    float p[3] = { 34, 90, 10 }; 
    Node *node = new Node(); 
    node->point = p; 
    return 0; 
} 

Dies funktioniert nicht wie erwartet.C++ Wie initialisiert man ein Array innerhalb eines Klassenobjekts?

Wie soll ich ein Array eines Klassenobjekts initialisieren?

+0

Verwenden 'std :: array ' statt – StoryTeller

+1

Was Konstrukteurs passiert? Und mit den richtigen * Speicherdauern *? – WhiZTiM

+0

Sie haben ein Speicherleck. – nwp

Antwort

5

Array! = Zeiger.

error: invalid array assignment 
    node->point = p; 

Hier ist der richtige Weg, um das Array zu kopieren:

class Node { 
public: 
    std::array<float,3> point; 
}; 

std::array<float,3> p = {34.0f, 90.0f, 10.0f}; 
node->point = p; 
:

std::copy(std::begin(p),std::end(p), std::begin(node->point)); 

Wenn Sie die Größe des Arrays bei der Kompilierung kennen, sollten Sie std::array verwenden

Sie können das Array auch über Konstruktor initialisieren und point als private Datenelement lassen :

// Ctor 
Node(std::array<float,3> p) { point = p; } 

// Calling 
Node *node = new Node({34.0f, 90.0f, 10.0f}); 
// Or 
std::array<float,3> p = {34.0f, 90.0f, 10.0f}; 
Node *node = new Node(p); 

Andernfalls, wenn Sie die Größe des Arrays zur Laufzeit wählen wollen, sollten Sie std::vector verwenden.

1

Wenn Sie Ihr Design verwenden, müssen Sie die Werte als Node reserves memory kopieren.

Ob Ihre Vorgehensweise eine gute Praxis ist, ist eine andere Frage. Initialisierung von außen ist etwas seltsam

class Node { 
    public: 
    float point[3]; 
}; 

int main(int argc, char** argv) { 
    float p[3] = { 34, 90, 10 }; 
    Node *node = new Node(); 
    memcpy (node->point, p, sizeof(p)); 
    return 0; 
} 

// alternative version 

int main(int argc, char** argv) { 
    Node *node = new Node(); 
    node->point[0] = 34.0f; 
    node->point[1] = 90.0f; 
    node->point[2] = 10.0f; 

    return 0; 
} 
Verwandte Themen