Ненужный заголовочный файл в файле проекта dll «исправляет» проблему с предварительно скомпилированными заголовками - PullRequest
0 голосов
/ 09 июля 2020

У меня странная проблема с созданием библиотеки.

В Visual Studio 2019 я создал проект dll и проект exe (который использует dll). В dll у меня есть один файл .h (назовем его mainFile.h), который включает файл заголовка с моим классом (Window.h). У класса есть строковый закрытый член. В моем проекте exe в main. cpp (только файл) я включаю «mainFile.h».

Когда я пытался создать объект класса Window в моем проекте exe, все было хорошо. Затем я решил использовать предварительно скомпилированные заголовки в своем проекте dll. После создания pch. cpp и .h (а также переключения параметров для использования / создания предварительно скомпилированных заголовков) я помещаю #include в pch.h. После этого возникла ошибка (например, строка не находится в пространстве имен std). Понятия не имею, почему.

Затем (чтобы попытаться исправить) я добавил #include в свой mainFile.h (больше ничего не добавлял в .h или. cpp файл, поэтому этот файл заголовка не нужен). Каким-то образом он устранил эту проблему.

Кто-нибудь знает, почему я получал такую ​​ошибку раньше и почему включение "решило" проблему? Может, мне стоит сделать что-нибудь еще, чтобы это не повторилось?

EDIT:

Структура моего проекта dll и содержимое файлов:

mainFile .h

#pragma once
//#include <iostream> //<--- this include "fixes" the problem
#include "Window/Window.h"

#ifdef DLL_DLL
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

namespace DLL
{
    void DLL_API helloThere();
}

mainFile. cpp

Включить заголовочный файл pch и определение функции DLL :: helloThere.

Folder1 / pch.h

#ifndef PCH_H
#define PCH_H

#include <string>

#endif

Folder1 / pch. cpp

#include "pch.h"

Folder2 / Window.h

#pragma once

#ifdef DLL_DLL
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

namespace DLL
{
    class DLL_API Window
    {
    public:
        Window(int width, int height, const char* title);
    private:
        int m_width, m_height;
        std::string m_title;
    };
}

Folder2 / Window. cpp

Включить для файла заголовка pch и определения в конструкторе класса Window.

И проект exe:

main. cpp

#include "mainFile.h"

int main()
{
    DLL::helloThere();
    DLL::Window window(600, 600, "?");

    return 0;
}

1 Ответ

0 голосов
/ 30 июля 2020

Насколько я понимаю, при создании проекта вы не можете выбирать Precomliled header.

enter image description here

enter image description here

For more details about precompiled header files, I suggest you could refer to the Do c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...