C++初始化对象和分配内存
我有一个类似的结构:C++初始化对象和分配内存,c++,class,oop,C++,Class,Oop,我有一个类似的结构: struct myNode{ Node node; // node object takes just name parameter I mean node(string name); int value; }; 在我的主函数中,我有一个struct myNode指针,我想首先读取一个文件,获取节点对象的名称和值,然后创建相应的struct myNode。为此,我写作 int main(){ struct myNode * myRoot;
struct myNode{
Node node; // node object takes just name parameter I mean node(string name);
int value;
};
在我的主函数中,我有一个struct myNode指针,我想首先读取一个文件,获取节点对象的名称和值,然后创建相应的struct myNode。为此,我写作
int main(){
struct myNode * myRoot;
ifstream myfile (fileName);
string line;
getline(myfile,line);
int value=getValue(line);
myRoot= new myNode();
myRoot->value=value;
myRoot->node=node a(line);
return 0;
}
但是,我不确定,这是正确的方法还是错误的,有人帮助我吗?是的,它可以工作,除了: 您忘记在函数主退出之前删除myRoot。是的,当你的程序退出时,操作系统可以回收它,但是你可以让你的代码更优雅。 myRoot->node=node aline可以是myRoot->node=Nodeline或myRoot->node=line,前提是结构节点的构造函数可以将line作为唯一参数。我假设您将a视为节点的临时实例。
在您代码中的许多致命问题中,我看到给您带来最大麻烦的是这一行:
myRoot->node = node a(line);
节点对齐部分是语法错误。我相信你的意思是:
myRoot->node = node(line);
或者,如果节点没有显式构造函数:
myRoot->node = line;
另一个致命的问题是,您正在使用指针,使用新的指针进行分配,这两个都是不必要的选项,并且您正在对文件流执行提取,而不检查它是否有效。所有这些问题都可以通过在堆栈上分配对象并检查输入是否成功来解决:
int main()
{
myNode myRoot;
ifstream myfile(fileName);
string line;
if (getline(myfile, line))
{
int value = getValue(line);
myRoot.value = value;
myRoot.node = line;
}
}
节点定义在哪里?向我们展示更多。另外,节点对齐;从你给我们看的很可疑,我觉得还可以。我猜myRoot->node=node aline是node aline node而不是nodee即使在结构的情况下,我更喜欢构造函数。i、 e.myNode int val,Node n:valueval,noden{}。您可以像这样使用它:myRoot=newmynodevalue,aline;//不管aline是什么。@EoiFirst:不,它不是。是一个未定义的标识符。也许myRoot->node=Nodeline是合适的。如果struct node的构造函数可以将line作为唯一的参数,那么myRoot->node=line-否!由于myRoot->node的构造已经完成,拥有这样的构造函数不会有任何帮助。只有当赋值运算符接受字符串或节点本身是字符串时,它才会起作用。@legends2k抱歉,我遗漏了一些内容。如果有一个操作符=接受line或节点的另一个实例,它将工作。