Re: auto_ptr problems
On 28 Mar, 15:11, lbonaf...@yahoo.com wrote:
On Mar 28, 9:20 am, Nick Keighley <nick_keighley_nos...@hotmail.com>
wrote:
I copy pasted this code from one of my projects to another. (I know
it should be a template, but I figure if I can't get the non-template
version there is no point in making things more complicated)
void Symbol_table::insert (const std::string name, const T* type)
{
std::auto_ptr <const T> ap_type (type); // <-- error =
here!
// more code...
}
This worked with one value for T but when I changed it. I got a syntax
error
Post the code that works and the code that fails.
rather long I'm afraid
Symbol_table_ok compiles
Symbol_table_fail doesn't
the problem seems to be the declaration of TfailPtr
<code begin>
#ifdef _MSC_VER
// Microsoft compiler
// disable warning: "identifier was truncated to '255' characters in
the debug information"
#pragma warning (disable:4786)
#endif
#include <string>
#include <memory>
#include <map>
class Tok
{
public:
Tok (std::string name)
:name_(name), special_(false)
{}
virtual ~Tok()
{}
private:
std::string name_;
bool special_;
};
class Tfail
{
public:
Tfail ()
{}
virtual ~Tfail ()
{}
virtual void execute (std::ostream&) = 0;
};
typedef std::auto_ptr<Tfail> TfailPtr; // <--- removing this
"fixes" the bug
typedef std::map<std::string,const Tok*> Table_ok;
class Symbol_table_ok
{
public:
Symbol_table_ok ();
~Symbol_table_ok ();
void insert (const std::string name, const Tok* type);
private:
Table_ok table_;
};
typedef std::map<std::string,const Tfail*> Table_fail;
class Symbol_table_fail
{
public:
Symbol_table_fail ();
~Symbol_table_fail ();
void insert (const std::string name, const Tfail* type);
private:
Table_fail table_;
};
Symbol_table_ok::Symbol_table_ok():
table_()
{
}
Symbol_table_ok::~Symbol_table_ok()
{
}
void Symbol_table_ok::insert (const std::string name, const Tok* type)
{
std::auto_ptr <const Tok> ap_type (type);}
Symbol_table_fail::Symbol_table_fail():
table_()
{
}
Symbol_table_fail::~Symbol_table_fail()
{
}
void Symbol_table_fail::insert (const std::string name, const Tfail*
type)
{
std::auto_ptr <const Tfail> ap_type (type); // <-- syntax
error here!
}
int main ()
{
Symbol_table_ok symtab_ok;
Symbol_table_fail symtab_fail;
return 0;
}
<code end>
--
Nick Keighley