2017-08-31 35 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; 
} 

這不符合預期。C++如何初始化類對象內的數組?

我應該如何初始化一個類對象的數組?

+0

使用'的std ::陣列'而不是 – StoryTeller

+1

發生了什麼事構造?並使用正確的*存儲時間*? – WhiZTiM

+0

您有內存泄漏。 – nwp

回答

5

Array!=指針。

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

這裏是一個數組複製的正確方法:如果你知道在編譯時數組的大小

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

,你應該使用std::array

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

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

另外,您可以通過構造函數初始化數組,並將point作爲private數據成員:

// 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); 

否則,如果你想選擇在運行時數組的大小,你應該使用std::vector

1

使用您的設計時,必須複製值作爲節點保留內存。

您的方法是否是一個好的做法是另一個問題。從外部初始化是有些奇怪

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