char数组解释为构造函数中的char指针请帮助

时间:2012-05-12 08:27:59

标签: c++ constructor struct char typedef

#ifndef ASSETS_H_INCLUDED
#define ASSETS_H_INCLUDED
#include <vector>
#include string.h>

const int ID_Max = 100;
typedef char ID[ID_Max];

struct node;

struct people{
std::vector<ID> T_ID;
std::vector<node*> Nodes;
people(ID t, node* person){
    T_ID.push_back(t);
    Nodes.push_back(person);
}
people(){}
};

struct node {
ID T_ID;
node* Parent;
people* leftChildren;
node* rightChild;
node(ID t, node* p, node* l, node* r) :I_ID(t), Parent(p), rightChild(r) 
{leftChildren = new people(); }
};

#endif // ASSETS_H_INCLUDED

我的问题是它在构造函数中将ID解释为char指针所以这是构造函数people :: people(char *,node *)当我想要people :: people(char [ID_Max],node * )节点相同。如果您有建议,将非常感谢。

1 个答案:

答案 0 :(得分:2)

如果你编写一个带有数组类型的函数签名,它就像使用指针一样,例如这样:

void f(char p[]);

与此相同:

void f(char *p);

这看起来像是你问题的根源。你可能会更好a std::array<char,ID_Max>(在C ++ 11中)或std::vector<char>(在C ++ 98中)。然后,您可以使用&cont[0]获取指向它包含的连续内存开头的指针。作为一个小问题,我似乎记得vector的内存并没有严格保证在C ++ 98中是连续的,但它在实践中总是连续的(你可以依赖它)。措辞在C ++ 03中修复。