繁体   English   中英

如何将预编译的 header 与动态库和控制台应用程序一起使用?

[英]How to use precompiled header with dynamic library and console application?

我对预编译的 header 有问题。 看起来有点像

ftpch.h


#pragma once
#include <vector>
#include <iostream>
#include <string>

#include <Windows.h>

ftpch.cpp

#include "ftpch.h"

然后我的 dll 库中有一个 header 文件和 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'

您的 header 文件应该始终是自给自足的。 将您的库(在本例中为<string> )包括在您需要它们的地方、您需要它们的任何地方以及仅在您需要它们的地方。

如果您的 header 需要 function 的某个库,请将其包含在该文件中; 不要回复已经包含该库的其他 header,因为如果该不同的文件发生更改,那么您就不走运了。

您已经通过#pragma once获得了#include保护,因此将#include <string.h>添加到需要它的 header 文件中不会导致冲突,并且还会使它们更易于维护和解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM