内联命名空间函数时出错

时间:2015-12-30 00:07:25

标签: c++ visual-c++ visual-studio-2015

我想确保在使用它时我的一个功能被内联,但由于某些原因我得到的错误是我无法理解的。我快速设置了一个测试环境来重现我的错误。这是:

Main.cpp的:

#include "ns1.h"
#include <iostream>

int main()
{
    if (Test::GiveMeCookies(false)){
        std::cout << "Here it is!\n";
    } else {
        std::cout << "You were a bad boy!\n";
    }

    return 0;
}

ns1.cpp:

#include "ns1.h"

__forceinline bool Test::GiveMeCookies(bool why)
{
    return !why;
}

ns1.h:

#pragma once

namespace Test
{
    __forceinline bool GiveMeCookies(bool why);
}

我收到的错误消息是:

  

1&gt; main.obj:错误LNK2019:未解析的外部符号&#34; bool __cdecl Test :: GiveMeCookies(bool)&#34; (?GiveMeCookies @ Test @@ YA_N_N @ Z)在函数_main

中引用      

1&gt; C:\ Users \ Unknown User \ Desktop \ NamespaceTest \ Debug \ NamespaceTest.exe:致命错误LNK1120:1个未解析的外部

有人能解释一下为什么我不能在命名空间中内联函数吗?我如何解决这个问题,同时保持我必须强制内联它。

2 个答案:

答案 0 :(得分:2)

您获得的错误与forceinline无关。 在ns1.cpp中,您的函数不在Test命名空间中。

它应该是这样的:

#include "ns1.h"
namespace Test
{
  __forceinline bool GiveMeCookies(bool why)
  {
      return !why;
  }
}

答案 1 :(得分:0)

在标题中添加extern似乎可以解决问题,但是我必须深入研究它是否真的内联。如果没有,那么我认为我们无法采取任何进一步的措施,所以可能它是最好的解决方案:

#pragma once

namespace Test
{
    extern __forceinline bool GiveMeCookies(bool why);
}