#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 * )节点相同。如果您有建议,将非常感谢。
答案 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中修复。