Код: Выделить всё
#ifndef __symbol_scalar_hxx
#define __symbol_scalar_hxx
#include "symbol.hxx"
#include "pyxis_lexer.hxx"
#include <string>
namespace engine_stuff {
struct symbol_scalar_exception {
enum symbol_scalar_exception_type {
undefined_variable
} type;
symbol_scalar_exception (symbol_scalar_exception_type t): type (t)
{}
};
class symbol_scalar: public symbol {
public:
enum symbol_scalar_type {
undef_scalar, bool_scalar, double_scalar, string_scalar
};
private:
std::string name;
symbol_scalar_type type;
bool bool_value;
double double_value;
std::string string_value;
public:
symbol_scalar (std::string & n);
bool operator == (const symbol_scalar & symb) const;
long hfunc ();
void set_type (symbol_scalar_type t);
void set_value (bool bool_val);
void set_value (double double_val);
void set_value (std::string & string_val);
const symbol_scalar_type & get_type ();
const bool & get_bool_value ();
const double & get_double_value ();
const std::string & get_string_value ();
};
};
#endif // __symbol_scalar_hxx
Код: Выделить всё
const std::string &
engine_stuff::symbol_scalar::get_string_value ()
{
switch (type) {
case undef_scalar:
throw symbol_scalar_exception (symbol_scalar_exception::undefined_variable);
case bool_scalar:
string_value = bool_value ? "true" : "false";
break;
case double_scalar:
char tmp[100];
{
std::strstream string_value_stream (tmp, sizeof (tmp), std::ios::in | std::ios::out);
string_value_stream << double_value;
string_value_stream >> string_value;
}
break;
case string_scalar:
break;
}
return string_value;
}
Код: Выделить всё
{
std::strstream string_value_stream (tmp, sizeof (tmp), std::ios::in | std::ios::out);
string_value_stream << double_value;
string_value_stream >> string_value;
}
Теперь непосредственно вопрос, почему не захотело компилиться так:
Код: Выделить всё
case double_scalar:
char tmp[100];
std::strstream string_value_stream (tmp, sizeof (tmp), std::ios::in | std::ios::out);
string_value_stream << double_value;
string_value_stream >> string_value;
string_value_stream.~strstream ();
break;