
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.