【发布时间】:2013-03-04 01:33:19
【问题描述】:
首先是我的代码布局:
啊.h
class STORAGE_CLASS_DECLARATOR A : public PureVirtual
{
some member functions, all working;
void someFunctionCallingOperator<<();
friend std::ostream& operator << (std::ostream &, A *);
}
A.cpp
std::ostream& operator << (std::ostream & out, A * a){...}
void A::someFunctionCallingOperator<<(){...}
其中 Storage_xxx_declarators 是 declspec 的宏。我已经尝试过使用和不使用声明符的朋友功能都无济于事。
我在操作符
据我了解,这可能是由于:
- 没有函数体,这显然是不正确的,因为文件肯定会针对其他正在运行的函数进行解析。
- 符号未正确导出。同样,我不知道这是如何发生的,在实际场景中,此处 A 的 operator
我意识到链接是一个单独的阶段,我一定是在做一些非常简单的错误,但我已经盯着一段时间了,无法从理论上解释为什么会发生这种情况,所以我求助于 SO
谢谢你, AK
【问题讨论】:
-
您遗漏了太多代码。你能准备一个minimal, but compilable example吗?
-
STORAGE_FUNC_DECLARATOR宏的具体内容是什么? -
@PLPiper 它是根据是否定义 Import/Export_storage_classes 有条件地定义的。目前它是导出(我正在构建 DLL),所以#define S_F_D __declspec(dllexport)
-
@Angew 我希望不会是这样,但我完全理解如果是这样。让我尝试添加更多细节。
-
只是一个疯狂的猜测:您的类定义是否包含在命名空间中,并且 .cpp 包含
using namespace指令?
标签: c++ dll linker unresolved-external