Skip to main content
GameDev.net gamedev.net
🔒 Locked

[solved][c++] undefined reference to... errors

Started by d1rk Nov 30, 2008 at 6:29 AM 2 replies 1.9k views
Original Post
d1rk
d1rk
When I compile my project with dev-c++ or code blocks(I didn't try other compilers) it gives lots of undefined reference errors for my logger class. My logger class is made a singleton by inhereting from a singleton class: what am I doing wrong?
[source="cpp"]
template <class stclass>
class singleton
{
  static stclass* stpointer;

  protected:
  singleton()
  {
    stpointer = 0;
  }
  ~singleton()
  {
    delete stpointer;
  }

  public:
  static stclass* getstpointer()
  {
  if (stpointer == 0)
  {
    stpointer = new stclass;
  }
  return stpointer;
  }
};

class loggerc: public singleton<loggerc>
{
  void addmessage(string);
};

class something
{
  loggerc* logger;

  something()
  {
    logger = loggerc::getstpointer();
  }
  dosomething()
  {
    logger->addmessage("I've added a message to the logger");
  }
};


Errors:
::getstpointer()]+0x37)||undefined reference to `singleton<loggerc>::stpointer'|
::getstpointer()]+0x9e)||undefined reference to `singleton<loggerc>::stpointer'|
::getstpointer()]+0xa3)||undefined reference to `singleton<loggerc>::stpointer'|

.objs\logger.o:logger.cpp:(.text+0x16b)||undefined reference to `singleton<loggerc>::singleton()'|
.objs\logger.o:logger.cpp:(.text+0x2cf)||undefined reference to `singleton<loggerc>::~singleton()'|
.objs\logger.o:logger.cpp:(.text+0x341)||undefined reference to `singleton<loggerc>::singleton()'|
.objs\logger.o:logger.cpp:(.text+0x4a5)||undefined reference to `singleton<loggerc>::~singleton()'|
.objs\logger.o:logger.cpp:(.text+0x517)||undefined reference to `singleton<loggerc>::singleton()'|
.objs\logger.o:logger.cpp:(.text+0x67a)||undefined reference to `singleton<loggerc>::~singleton()'|
.objs\logger.o:logger.cpp:(.text+0x6ed)||undefined reference to `singleton<loggerc>::singleton()'|
.objs\logger.o:logger.cpp:(.text+0x850)||undefined reference to `singleton<loggerc>::~singleton()'|
.objs\logger.o:logger.cpp:(.text+0x9d9)||undefined reference to `singleton<loggerc>::~singleton()'|
.objs\logger.o:logger.cpp:(.text+0xa03)||undefined reference to `singleton<loggerc>::~singleton()'|
.objs\logger.o:logger.cpp:(.text+0xb73)||undefined reference to `singleton<loggerc>::~singleton()'|
.objs\logger.o:logger.cpp:(.text+0xb9d)||undefined reference to `singleton<loggerc>::~singleton()'|
[Edited by - d1rk on November 30, 2008 7:37:09 AM]
DevFred
DevFred
Quote:
Original post by d1rk
My logger class is made a singleton by inhereting from a singleton class

That sounds horrible.

Quote:
Original post by d1rk
static stclass* stpointer;

If my memory serves me right, this is only a declaration, not a definition. You have to define stpointer somewhere.
d1rk
d1rk
Thanks a lot.

I had to define stpointer just like you said.
rip-off
rip-off
Why not just use a global logger, or a function that returns a global instance?

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.