1
#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[ID_Max], node*) 相同时,这是构造函数 people::people(char*, node*)节点。如果您有建议,将不胜感激。

4

1 回答 1

2

如果您在其中编写带有数组类型的函数签名,则与使用指针相同,例如:

void f(char p[]);

与此相同:

void f(char *p);

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

于 2012-05-12T08:59:46.917 回答