У меня странная проблема с созданием библиотеки.
В 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;
}