所以我必須編寫一個.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