У меня возникла эта проблема, когда я не могу вызвать конструктор объекта в main.cpp даже после того, как он был включен в main.h. Сообщение об ошибке:
C:\Users\Espresso\Projects\AZRA\Debug/../src/main.cpp:7: undefined reference to 'g_editor::LevelEditor::LevelEditor()'
Где main.cpp содержит
#include "main.h"
g_editor::LevelEditor g_levelEditor;
и main.h содержит:
#include "g_editor/g_editor.h"
g_editor.h содержит все файлы заголовков объектов в библиотеке, которые включают 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
И, наконец, LevelEditor.h содержит конструктор и функции-члены 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() {};
Я прошу прощения за стену текста, я смотрел на это уже несколько дней, и я попытался переупорядочить статические библиотеки по приоритету (что устранило все проблемы, кроме этого). Есть ли недостаток в моей текущей настройке? Я использую sSingletons, глобальные externs и статические библиотеки.
Нет определения LevelEditor::LevelEditor
.
У вас либо отсутствует исходный файл, либо вы забыли добавить {}
.
Изменение: или, если ваш конструктор ничего не делает, просто удалите объявление.
Или
1) Эта функция отсутствует:
LevelEditor(); // So now what does this do???? That what is missing.
или
2) его не хватает, но вы не добавили исходный модуль или библиотеку, где эта функция находится в настройках компоновщика.