我无法使用此设置复制它:
CMakeLists.txt
cmake_minimum_required(VERSION 3.8.0)
project(test)
set(DLL_SRCS thing.cpp)
set(DLL_HDRS thing.h)
add_library(Thing SHARED ${DLL_SRCS} ${DLL_HDRS})
set(Headers_dir ${CMAKE_CURRENT_BINARY_DIR}/dll_public_headers)
configure_file(${DLL_HDRS} ${Headers_dir} COPYONLY)
set(APP_SRCS main.cpp)
add_executable(App ${APP_SRCS})
target_link_libraries(APP Thing)
include_directories(${Headers_dir})
东西.h
#pragma once
struct thing
{
private:
struct Private;
public:
thing();
Private * impl
};
东西.cpp
#include "thing.h"
struct thing::Private
{
char member;
}
thing::thing()
{
impl = new Private;
impl->member = 'a';
}
主文件
#include "thing.h"
int main(int argc, char * argv[])
{
thing thing_from_dll;
return 0;
}
如果你不能让它工作,我会敦促你提供一个类似的mcve。我对这个没那么敏感,所以别担心。我还是会帮你的。
这适用于 Visual Studio 2017。我在 return 0 上放置了一个断点,可以看到该成员的值为“a”。
我认为您的设置中唯一可能缺少的是调试器的源文件。也许它可以加载您的调试数据库,但实际上并没有找到您定义私有实现的文件。在此处查看更多详细信息。