【发布时间】:2025-12-22 12:15:12
【问题描述】:
假设我有 2 个简单的类 A 和 C,我还有指向 A 和 C 的指针形式的全局外部变量。代码:
//global.h
#pragma once
#include "A.h"
#include "C.h"
struct A;
struct C;
extern A* external_a;
extern C* external_c;
/////////////////////////////////////////
//A.h
#pragma once
struct A {
void get();
};
/////////////////////////////////////////
//A.cpp
#include "A.h"
void A::get() {}
/////////////////////////////////////////
//C.h
#pragma once
# include "global.h"
struct C {
void doit();
};
/////////////////////////////////////////
//C.cpp
# include "C.h"
void C::doit() { external_a->get(); }
/////////////////////////////////////////
我只列出了 DLL 代码。关键是 DLL 用户从(声明)他的 EXE 代码中提供 main.cpp 全局变量供我的 DLL 代码使用。所以用户不在同一个项目中,而我想在我的 DLL 项目中的多个文件中使用该外部变量。
我从这段代码中得到两个关于unresolved external symbol "struct A * external_a"的错误
我尝试在类定义中和external 关键字之后写__declspec(dllexport)。它无助于修复错误。所以我想知道该怎么做才能编译这样的项目?
【问题讨论】:
-
“A.h”中存在什么。你在哪里定义了A* external_a,应该先声明它与extern关键字一起使用。
-
我看不到
external_a和external_c是在哪里定义的。 -
您是否尝试过 DLL 中明显的
extern __declspec(dllimport) A* external_a;和__declspec(dllexport) A* external_a;? (“显而易见”是指“如果您已经知道如何导出函数,则显而易见) -
是的,我试过了——同样的错误。 external_a 和 external_c 由 DLL 用户定义。
标签: c++ windows dll global-variables external