Форум программистов, компьютерный форум CyberForum.ru

Undefined reference при создании объекта - C++

Восстановить пароль Регистрация
 
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
30.05.2014, 09:39     Undefined reference при создании объекта #1
Есть класс Engine и функция для его инициализации - CreateEngine при попытке создать объект с помощью Engine *engine = CreateEngine("Engine") происходит Undefined reference to CreateEngine(std::string, int, int)
Engine.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Engine
{
public:
    Engine(EngineConfig *config);
    Engine(const Engine& orig);
    void Init();
    virtual ~Engine();
private:
    SDL_DisplayMode *displayMode;
    SDL_Window *window;
    SDL_Renderer *render;
    EngineConfig *config;
};
 
Engine *CreateEngine(std::string caption, int height = 640, int width = 480);
};

часть Engine.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
Engine *CreateEngine(std::string caption, int height, int width)
{
    Engine *engine;
    EngineConfig *config = new EngineConfig;
    config->Caption = caption;
    config->Height = height;
    config->Width = width;
    config->PosX = SDL_WINDOWPOS_UNDEFINED;
    config->PosY = SDL_WINDOWPOS_UNDEFINED;
    engine = new Engine(config);
    return engine;
}


Добавлено через 3 минуты
Компиляция с ключами -c -g -std=c++11 -MMD -MP -MF
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.05.2014, 09:40     Undefined reference при создании объекта #2
Показать код от объявления до вызова CreateEngine не судьба? Ведь ясно, что у вас где-то теряется связанность.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
30.05.2014, 09:47     Undefined reference при создании объекта #3
Зачем в 16 строке
Цитата Сообщение от Koncord Посмотреть сообщение
};
?
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
30.05.2014, 09:49  [ТС]     Undefined reference при создании объекта #4
Вы про метод Engine::Engine(EngineConfig *config)? Так там ничего особенного нет, только передача адреса config в this->config, а сам EngineConfig - это всего лишь структура.
C++
1
2
3
4
5
6
7
Engine::Engine(EngineConfig *config)
{
    displayMode = nullptr;
    window = nullptr;
    render = nullptr;
    this->config = config;
}
C++
1
2
3
4
5
6
7
8
struct EngineConfig
{
    std::string Caption;
    int Height;
    int Width;
    int PosX;
    int PosY;
};
Добавлено через 57 секунд
zss, это кусок от namespace core {
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.05.2014, 09:52     Undefined reference при создании объекта #5
Цитата Сообщение от Koncord Посмотреть сообщение
Вы про метод Engine::Engine(EngineConfig *config)?
Нет. Компоновщик не видит функцию. Значит либо она определена в другом модуле, который не подключается к текущей единице трансляции, либо в объявлении допущена ошибка либо еще что-то. Т.е. дело не в классе Engine. Поэтому нужно узреть код где ф-я объявляется, где вызывается и где определяется.
Цитата Сообщение от Koncord Посмотреть сообщение
это кусок от namespace core {
Вот вот простанство имен указали если она в нем находится?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
30.05.2014, 09:52     Undefined reference при создании объекта #6
Цитата Сообщение от Koncord Посмотреть сообщение
это кусок от namespace core {
В cpp фукнкция тоже в пространстве имен core?
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
30.05.2014, 09:56  [ТС]     Undefined reference при создании объекта #7
0x10, да, там using namespace core;
если так нужно, то вот
C++
1
2
3
4
5
6
7
8
9
10
#include <SDL2/SDL.h>
#include "Engine.hpp"
int main(int argc, char* argv[])
{
    core::Engine *engine = core::CreateEngine("RWA Engine");
    engine->Init();
 
    SDL_Quit();
    return 0;
}
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.05.2014, 10:01     Undefined reference при создании объекта #8
А дальше?
Цитата Сообщение от Ilot Посмотреть сообщение
Поэтому нужно узреть код где ф-я объявляется, где вызывается и где определяется.
Что ж из вас-то приходится все силком вытягивать. Не уж-то коммерческий проект ваяете?
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
30.05.2014, 10:13  [ТС]     Undefined reference при создании объекта #9
Я вроде бы уже написал где ф-я объявлена, определена и вызвана.

Не по теме:

Нет, сам двиг MIT, а вот то что на нем написано коммерческая тайна



Добавлено через 9 минут
Проблема остается даже если все из namespace'ов вытащить. Ну оно и ясно, ведь ругается не компилятор, а линковщик.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.05.2014, 10:21     Undefined reference при создании объекта #10
Понятно. Значит не хотите показывать код. Ваше право.
У меня вот так работает:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <string>
namespace core {
 
class EngineConfig {};
class Engine
{
public:
    Engine(EngineConfig *config)
    {
      this->config = config;
    }
    Engine(const Engine& orig);
    void Init();
    virtual ~Engine()
    {}
private:
    EngineConfig *config;
};
Engine *CreateEngine(std::string caption, int height = 640, int width = 480);
Engine *CreateEngine(std::string caption, int height , int width)
{
    Engine *engine;
    EngineConfig *config = new EngineConfig;
 
    engine = new Engine(config);
    return engine;
}
 
} //namespace core
int main(int argc, char* argv[])
{
    core::Engine *engine = core::CreateEngine("RWA Engine");
 
    return 0;
}

Все ли у вас совпадает? (Убрал все неиспользуемое). Проверяйте. Больше помочь нечем не могу
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
30.05.2014, 10:26  [ТС]     Undefined reference при создании объекта #11
Нашел проблему, надо было явно указать область имен core для определения функции.
Проблема остается даже если все из namespace'ов вытащить. Ну оно и ясно, ведь ругается не компилятор, а линковщик.
забыл сохранить файл .

Добавлено через 4 минуты
Значит так нельзя
C++
1
2
3
4
5
6
7
using namespace core;
Engine * CreateEngine(std::string caption, int height, int width)
{
    Engine *engine;
...
    return engine;
}
а так можно
C++
1
2
3
4
5
6
Engine *core::CreateEngine(std::string caption, int height, int width)
{
    Engine *engine;
...
    return engine;
}
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.05.2014, 10:36     Undefined reference при создании объекта #12
Цитата Сообщение от Koncord Посмотреть сообщение
а так можно
Так нужно. Иначе зачем вам простанства имен?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2014, 12:37     Undefined reference при создании объекта
Еще ссылки по теме:

При создании объекта структуры не вызываются конструкторы C++
C++ Ошибка: undefined reference to при наследовании класса
При компиляции Dev-C ошибки: undefined reference to C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
0x10
30.05.2014, 12:37     Undefined reference при создании объекта
  #13

Не по теме:

Цитата Сообщение от 0x10 Посмотреть сообщение
В cpp фукнкция тоже в пространстве имен core?
Цитата Сообщение от Koncord Посмотреть сообщение
0x10, да, там using namespace core;
...

Yandex
Объявления
30.05.2014, 12:37     Undefined reference при создании объекта
Ответ Создать тему
Опции темы

Текущее время: 23:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru