所以我必须编写一个.dot文件来制作排序后的avl树的graphviz图像。方法头被提供了,我必须要做。Stringstream到字符串返回?
主要问题是如何正确调用build_dot_content()方法,当它是std :: string的一部分?
void avl::dump_dot(std::string filename){
string s;
ofstream fptr;
fptr.open(filename);
fptr<<"digraph AVL {"<<endl<<"graph [dpi=150];"<<endl<<"nodsep=0.3;"<<endl;
fptr<<"ranksep=0.2;"<<endl<<"margin=0.1"<<endl<<"node [shape = circle fontname=\"Helvetica\"];"<<endl;
fptr<<"edge [arrowsize=0.8]"<<endl<<endl;
stringstream o;
s=string build_dot_content(o, root, 1);
fptr<<s<<endl<<"}"<<endl;
}
std::string build_dot_content(std::stringstream &o, avl_node *e, int i) {
o<<"node"<<i<<" [label =\""<<e->element<<"\"];"<<endl;
int iL = 2*i;
int iR = 2*i+1;
if(e->left != nullptr){
o<<"node"<<i<<" -> node"<<iL<<";"<<endl;
build_dot_content(o, e->left, iL);
}
if(e->right != nullptr){
o<<"node"<<i<<" -> node"<<iR<<";"<<endl;
build_dot_content(o, e->right, iR);
}
string s;
s = o.str();
return s;
}
请扩展或reword“如何正确调用build_dot_content()方法,当它是std :: string的一部分?”目前我无法理解它。 – user4581301
这是我得到的错误。 avl.cpp:216:未定义引用到'avl :: build_dot_content(std :: basic_stringstream,std :: allocator >&,avl_node *,int)' collect2:error:ld返回1退出状态 –
对不起,但'fptr'?文件指针?咦? 'fstream'!='FILE *'。它不是一个指针,它是一个流对象。 – emlai