定义#ifdef #else时出现奇怪的链接错误

时间:2013-11-21 16:19:37

标签: c++ visual-studio-2010

我面临着与VC 2010非常奇怪的链接问题。现在我正在开发一个C ++库,为了使调试更容易,对于某些函数,库提供了两个函数接口。例如,

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,都可以构建库,并且仅在调用库时才会发生链接错误。

1 个答案:

答案 0 :(得分:0)

由于您没有发布确切的错误消息,this MSDN link可能对您有所帮助。

提示:在询问您的问题时是否具体,是否希望收到准确的答案。