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*, node*) で、 people::people(char[ID_Max], 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]。マイナーな問題として、C ++ 98でのメモリが連続していることが厳密に保証されていなかったことを思い出しているようですがvector、実際には常に連続していました(信頼できます)。表現はC++03で修正されました。

于 2012-05-12T08:59:46.917 に答える