С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 17.08.2016
Сообщений: 17
1

Ошибки при создании окна

09.02.2017, 12:19. Показов 734. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, не могли бы вы опять мне(Иванушке Дурачку) помочь? У меня есть библиотека на C++ которая называется Engine в ней есть класс Engine у которого есть конструктор, структура EngineSetup, деструктор и метод Run. С деструктором все понятно и все нормально, но с конструктором все не так когда я тестирую библиотеку вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int WINAPI WinMain( HINSTANCE instance, HINSTANCE prev, LPSTR cmdLine, int cmdShow )
{
    // Create the engine setup structure.
    EngineSetup setup;
    setup.instance = instance;
    setup.name = "Framework Test";
 
    // Create the engine (using the setup structure), then run it.
    new Engine( &setup );
    g_engine->Run();
 
    return true;
}
У меня выдает ошибки:
Ошибка 4 error LNK2019: ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup C:\Users\***\documents\visual studio 2012\Projects\Engine\Engine Test\MSVCRTD.lib(crtexe.obj)
Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Engine::Run(void)" (?Run@Engine@@QAEXXZ) в функции _WinMain@16 C:\Users\***\documents\visual studio 2012\Projects\Engine\Engine Test\main.obj
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Engine::Engine(struct EngineSetup *)" (??0Engine@@QAE@PAUEngineSetup@@@Z) в функции _WinMain@16 C:\Users\***\documents\visual studio 2012\Projects\Engine\Engine Test\main.obj
Ошибка 3 error LNK2001: неразрешенный внешний символ ""class Engine * g_engine" (?g_engine@@3PAVEngine@@A)" C:\Users\***\documents\visual studio 2012\Projects\Engine\Engine Test\main.obj
Ошибка 5 error LNK1120: неразрешенных внешних элементов: 4 C:\Users\***\documents\visual studio 2012\Projects\Engine\Debug\Engine Test.exe
Вот код конструктора:
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
36
37
38
39
40
41
42
43
Engine::Engine(EngineSetup *setup)
{
    // Указываем, что движок ещё не загружен.
    m_loaded = false;
 
    // Если никакой структуры EngineSetup не передаётся, обязательно создадим её.
    // Иначе, копируем имя передаваемой структуры.
    m_setup = new EngineSetup;
    if( setup != NULL )
        memcpy( m_setup, setup, sizeof( EngineSetup ) );
 
    // Сохраняем указатель движка в глобальной переменной для более простого и быстрого доступа.
    g_engine = this;
 
    // Подготавливаем оконный класс и регистрируем его.
    WNDCLASSEX wcex;
    wcex.cbSize        = sizeof( WNDCLASSEX );
    wcex.style         = CS_CLASSDC;
    wcex.lpfnWndProc   = WindowProc;
    wcex.cbClsExtra    = 0;
    wcex.cbWndExtra    = 0;
    wcex.hInstance     = m_setup->instance;
    wcex.hIcon         = LoadIcon( NULL, IDI_APPLICATION );
    wcex.hCursor       = LoadCursor( NULL, IDC_ARROW );
    wcex.hbrBackground = NULL;
    wcex.lpszMenuName  = NULL;
    wcex.lpszClassName = "WindowClass";
    wcex.hIconSm       = LoadIcon( NULL, IDI_APPLICATION );
    RegisterClassEx( &wcex );
 
    // Инициализируем COM используя многопоточное взаимодействие.
    CoInitializeEx( NULL, COINIT_MULTITHREADED );
 
    // Create the window and retrieve a handle to it.
// Note: Позднее окно будет создаваться с флагом windowed/fullscreen (оконный/полноэкранный режимы).
    m_window = CreateWindowEx( WS_EX_TOPMOST, "WindowClass", m_setup->name, WS_OVERLAPPED, 0, 0, 800, 600, NULL, NULL, m_setup->instance, NULL );
 
    // Создаём генератор случайных чисел на основе текущего времени.
    srand(time(NULL));
 
    // Движок полностью загружен и готов к работе.
    m_loaded = true;
}
структуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct EngineSetup
{
    HINSTANCE instance; // Discription instance of the app
    char *name; // App title
 
    //-------------------------------------------------------------------------
    // The engine setup structure constructor.
    //-------------------------------------------------------------------------
    EngineSetup()
    {
        instance = NULL;
        name = "Application"; // App title
    }
};
и Run:
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
void Engine::Run()
{
    // Убеждаемся, что движок загружен.
    if( m_loaded == true )
    {
        // Показываем окно.
        ShowWindow( m_window, SW_NORMAL );
 
        // Входим в цикл выборки сообщений.
        MSG msg;
        ZeroMemory( &msg, sizeof( MSG ) );
        while( msg.message != WM_QUIT )
        {
            if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
            {
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }
            else if( !m_deactive )
            {
                // Подсчитываем затраченное время.
                unsigned long currentTime = time(NULL);
                static unsigned long lastTime = currentTime;
                float elapsed = ( currentTime - lastTime ) / 1000.0f;
                lastTime = currentTime;
            }
        }
    }
 
    // Уничтожаем движок.
    SAFE_DELETE( g_engine );
}
Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.02.2017, 12:19
Ответы с готовыми решениями:

Ошибки при создании .dll
Решил попробывать создать .dll. Столкнулся с проблемами. DLLTEST.h #ifndef _DLLTEST_H_ #define...

Ошибки при создании шаблона
#include <iostream> #include <conio.h> #include "time.h" #include <math.h> #include <stdio.h> ...

Ошибки при создании vector'a пользовательского класса
Шалом, мои весьма дорогие друзья, столкнулся с проблемой. Решил использовать вместо массивов...

Ошибки при создании объекта в другом файле
a.h struct Coords { int x; int y; Coords() {}; Coords(int mX, int mY) { x = mX; y = mY;...

9
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.02.2017, 17:44 2
Цитата Сообщение от _TomasNo_ Посмотреть сообщение
C++
1
new Engine( &setup );
Это, собственно, как понять?
Цитата Сообщение от _TomasNo_ Посмотреть сообщение
Вот код конструктора:
В каком файле он находится? Добавлен ли этот файл в проект?
Цитата Сообщение от _TomasNo_ Посмотреть сообщение
и Run:
В каком файле он находится? Добавлен ли этот файл в проект?
0
Модератор
Эксперт С++
13722 / 10919 / 6478
Регистрация: 18.12.2011
Сообщений: 29,150
09.02.2017, 18:07 3
И проект должен быть "Windows приложение", а не "консольное приложение".

Добавлено через 1 минуту
Цитата Сообщение от _TomasNo_ Посмотреть сообщение
C++
1
new Engine( &setup ); g_engine->Run();
А вот это должно быть так
C++
1
2
3
Engine* g_engine= new Engine( &setup ); 
g_engine->Run();
delete g_engine;
0
0 / 0 / 0
Регистрация: 17.08.2016
Сообщений: 17
09.02.2017, 21:55  [ТС] 4
Простите, моя ошибка в классе Engnie создается g_engine, думаю что проблема в Консольном приложении..... Попробую позже)

Добавлено через 3 минуты
И да, Run, конструктор и структура в файле Engine
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.02.2017, 22:00 5
Цитата Сообщение от _TomasNo_ Посмотреть сообщение
И да, Run, конструктор и структура в файле Engine
Реализации? Расширение у файла имеется? Если это .cpp, то:
Цитата Сообщение от nd2 Посмотреть сообщение
Добавлен ли этот файл в проект?
0
0 / 0 / 0
Регистрация: 17.08.2016
Сообщений: 17
10.02.2017, 11:20  [ТС] 6
cpp, добавлен

Добавлено через 2 минуты
А может надо что-то прописать в параметры проекта?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.02.2017, 13:42 7
Проект, в архиве, выложи.
0
0 / 0 / 0
Регистрация: 17.08.2016
Сообщений: 17
13.02.2017, 22:04  [ТС] 8
Я понял, ничего не надо выкладывать. Эти ошибки возникают всегда когда я прибегаю к помощи WinApi. Но я до сих пор не знаю как это исправить.....
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
13.02.2017, 22:09 9
Цитата Сообщение от _TomasNo_ Посмотреть сообщение
Я понял
Цитата Сообщение от _TomasNo_ Посмотреть сообщение
Но я до сих пор не знаю как это исправить.....
Так ты понял, или не понял? Если не понял:
Цитата Сообщение от nd2 Посмотреть сообщение
Проект, в архиве, выложи.
0
0 / 0 / 0
Регистрация: 17.08.2016
Сообщений: 17
17.02.2017, 12:14  [ТС] 10
Всё я разобрался! Тему можно закрывать.
0
17.02.2017, 12:14
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2017, 12:14
Помогаю со студенческими работами здесь

Ошибки в выполнении программы при динамическом создании структуры
Всем привет! В с++ не силен, только постигаю азы. Имеется задание (во вложении). Смахивает на...

Краш при создании чекпоинта: найти и исправить ошибки в коде
RPC_CALLBACK CRPCCallback::SetPlayerCheckpointEx(RPC_ARGS) { CVector pos; float size;...

Проблемы при создании и построении проекта Microsoft Visual Studio 2008 Ошибки!
Проблемы при создании и построении проекта Microsoft Visual Studio 2008. Ошибки!!!

Ошибки в создании списка
Не компилится код, ругается на: 1) 40. spisok() {m=k=0; beg1=end1=beg2=end2=NULL;} - cannot...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru