我的情况:我正在写DLL,它有很多类,但是我只导出一个:
#pragma once
#ifdef APIDLL_EXPORTS
#define APIDLL_API __declspec(dllexport)
#else
#define APIDLL_API __declspec(dllimport)
#endif
class Process; // <-- ApiClient uses pointer to that class, so I forward declare it
class APIDLL_API ApiClient
{
web::http::client::http_client client; // (*) line
public:
void check(Process * p);
}
在ApiClient.cpp
中,我有#include "pch.h"
,即:
#ifndef PCH_H
#define PCH_H
// add headers that you want to pre-compile here
#include "framework.h"
#include <sstream>
#include <iomanip>
#include <cpprest/http_client.h>
#include <cpprest/json.h>
#include <cpprest/asyncrt_utils.h>
#endif //PCH_H
由于它是作为DLL编译的,因此当我将其链接到控制台应用程序时不会编译。我放在includes
目录ApiClient.h
中(因为我导出并且只需要这个)(。lib的路径正确)。我在(*)行E0276 name followed by '::' must be a class or namespace name
中遇到错误。看来编译器看不到http_client
的定义。因此,如果我在#include <cpprest/http_client.h>
中添加ApiClient.h
,一切都很好。
但是我想在'pch.h'中包含所有需要的依赖项。我也应该将其复制到includes
目录吗?但是,如果我向pch.h添加一些相对路径,该怎么办?