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