c++ - 如何将预编译头文件与动态库和控制台应用程序一起使用?
问题描述
我有预编译头的问题。看起来有点像
ftpch.h
#pragma once
#include <vector>
#include <iostream>
#include <string>
#include <Windows.h>
ftpch.cpp
#include "ftpch.h"
然后我的 dll 库中有一个头文件和 cpp。测试.h
#pragma once
// DLL_EXPORT is a macro that changes for dll and console app like that:
// __declspec(dllexport) and __declspec(dllimport)
class DLL_EXPORT Test
{
std::string foo() {return "ara ara"};
}
当我编译我的动态库项目时,这段代码编译得很好,但是当我在我的控制台应用程序项目中包含“test.h”并尝试编译它时编译失败。我得到的错误是:
C2039: 'string' is not a member of 'std'
解决方案
您的头文件应该始终是自给自足的。将您的库(在本例中<string>
)包括在您需要它们的地方、您需要它们的任何地方以及仅在您需要它们的地方。
如果您的标头需要某个库才能运行,请将其包含在该文件中;不要回复已经包含该库的其他标题,因为如果该不同的文件发生更改,那么您就不走运了。
您已经#include
通过 保护#pragma once
,因此添加#include <string.h>
到需要它的头文件不会导致冲突,并且还将使它们更易于维护和解释。
推荐阅读
- java - Gson RuntimeTypeAdapterFactory 在反序列化后将我的 userType 转换为 null
- python - python合并dfs并转向字典
- angular - 用户关闭浏览器时的 Api 调用
- go - Golang中谷歌云功能部署错误
- javascript - npm 不下载 .d.ts 文件
- laravel - 如何使用 xampp 在本地运行多个 laravel 应用程序并使它们可供我本地网络上的其他 PC 访问
- javascript - 是否可以在不导入的情况下使用类型定义?
- arrays - 如何从数组中打印类属性?
- python - 为什么浏览器会自行关闭(进程以退出代码 0 结束)
- blockchain - 如何在 DAPP 中存储额外的用户信息?