Search code examples
c++constructorstatic-librariesgame-enginestatic-linking

Static Library "Undefined Reference" to object constructor


I'm having this issue where I cannot call the object constructor in main.cpp even after it has been included in main.h. The error message is:

C:\Users\Espresso\Projects\AZRA\Debug/../src/main.cpp:7: undefined reference to `g_editor::LevelEditor::LevelEditor()'

Where main.cpp contains

#include "main.h"
g_editor::LevelEditor g_levelEditor;

and main.h contains:

#include "g_editor/g_editor.h"

g_editor.h contains all of the header files of the objects in the library, which includes the levelEditor. g_editor.h:

#ifndef G_EDITOR_H_
#define G_EDITOR_H_
#pragma once

#include "g_editor/Objects/editor_module.h"
#include "g_editor/Objects/utility_window.h"
#include "g_editor/Objects/prompt_window.h"
#include "g_editor/LevelEditor/LevelEditor.h"

extern g_editor::LevelEditor g_levelEditor;

#endif

And finally, LevelEditor.h contains the constructor and member functions of LevelEditor:

#ifndef G_LEVEL_EDITOR_H_
#define G_LEVEL_EDITOR_H_
#pragma once

#include "../Objects/editor_module.h"
#include "Modules/collisionGrid_module.h"
#include "Modules/HUD_module.h"
#include "Modules/IO_module.h"
#include "Modules/ledge_module.h"
#include "Modules/segment_module.h"
#include "g_level/g_level.h"

using namespace g_level;
namespace g_editor
{
    class LevelEditor
    {
        private:
            std::vector<editor_module*> modules;
            void loadModules();

        public:
            static LevelEditor& get()
            {
                static LevelEditor sSingleton;
                return sSingleton;
            }
            LevelEditor();
            ~LevelEditor() {};

I apologize for the wall of text, I've been staring at this for a few days now and I have tried reordering the static libraries by precedence (which eliminated all issues save for this one.) Is there a design flaw in my current setup? I am using sSingletons, global externs, and static libraries.


Solution

  • There is no definition of LevelEditor::LevelEditor.

    You are either missing a source file, or you forgot to add {}.

    Edit: or, if your constructor does not do anything anyway, just remove the declaration.