gpt4 book ai didi

c++ - char 数组在构造函数中被解释为 char 指针,请帮忙

转载 作者:行者123 更新时间:2023-11-30 04:27:54 24 4
gpt4 key购买 nike

#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* ) 节点相同。如果您有建议,将不胜感激。

最佳答案

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

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 中得到了修复。

关于c++ - char 数组在构造函数中被解释为 char 指针,请帮忙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10562157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com