我面对VC 2010中一个非常奇怪的链接问题。现在我正在开发一个C++库,为了使调试更容易,对于某些函数,库提供了两个函数接口。例如,定义#ifdef #else时出现奇怪的链接错误
class Object
{
public:
int fun(std::vector<int> &auxiliary_variable_for_debug_purpose);
int fun();
}
也可以重新组织这样这个类:
class Object
{
public:
#ifdef DEBUG_INDICATOR
int fun(std::vector<int> &auxiliary_variable_for_debug_purpose);
#else
int fun();
#endif
}
这样我除了给出一个明确的接口给用户。
我现在面临的问题是int fun(std::vector<int> &auxiliary_variable_for_debug_purpose);
和int fun();
将调用另一个函数void help_function()
,它是在分开的文件中声明和定义的。
file.h
void help_function()
和
file.cpp
void help_function()
{
// do something
}
正如你可以看到void help_function()
无论是在同一DEBUG_INDICATOR
是否定义或没有。如果我定义了DEBUG_INDICATOR
,我可以用int fun()
函数编译这个类没有任何问题。但是,当我未定义DEBUG_INDICATOR
,错误LNK2001
发生错误,表明无法解析的外部符号void help_function()
。我尝试了所有可能的方法来弄清楚,但失败了。任何想法将不胜感激。
编辑
我所建的图书馆是一个动态库。无论是否定义了DEBUG_INDICATOR
,都可以构建库,并且只有在调用库时才会发生链接错误。
什么是您确切的错误信息? – Ben
您使用'int fun(std :: vector&auxiliary_variable_for_debug_purpose);'当'DEBUG_INDICATOR'被定义为不是'int fun()'时。 –
MahanGM
1.给我们提供完整的错误信息。 2.你是否尝试重建整个解决方案? – Dialecticus