Hi ppl-gr, I used the function set_output_function() how you suggest me. When I use it in a single program like in your tests example it works correctly, but when I use it in a class I must declare it static; I used it in a my_print function in order to print the ph for each comand. I think that this happens for this reason: since the namespace Variable have static member when I used the functions of this namespace in a class (an object which can be initialized more times) I must declare them static. The problem is in this class: class Cmd{ public: //ph which I have in each statement NNC_Polyhedron ph_in; //these are Hashmap the first element is the dimension //and the second the variable to print static map<dimension_type, string> var_to_print; static map<dimension_type, string>::iterator iter; public: static void Cmd::new_output_function(ostream& s, const Variable v) { iter = var_to_print.find(v.id()); s << iter->second; } void Cmd::print_constraints(const ConSys& cs, const string& intro, ostream& s){ using namespace IO_Operators; // Save the default output function. Variable::Output_Function_Type* p_default_output_function = Variable::get_output_function(); // Install an alternate output function. Variable::set_output_function(new_output_function); /* Your code of print_constraints() */ /* Code to restore the default output function. */ [...] }; when I compile it the g++ gives me these errors: /tmp/ccOzbfS7.o(.gnu.linkonce.t._ZN3Cmd19new_output_functionERSoN23Parma_Polyhedra_Library8VariableE+0x24): In function `Cmd::new_output_function(std::basic_ostream<char, std::char_traits<char> >&, Parma_Polyhedra_Library::Variable)': : undefined reference to `Cmd::var_to_print' [...] : undefined reference to `Cmd::iter' [...] Sorry but I am a java-programmer and sometimes when I used c++ I make some stupid mistake. All the bests, Enrico.