内联命名空间函数时出错

Error with inlining a namespace function

本文关键字:出错 函数 命名空间      更新时间:2023-10-16

我想确保我的一个函数在使用时是内联的,但由于某种原因,我遇到了无法理解的错误。我很快设置了一个测试环境来重现我的错误。这是:

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>main.obj:错误LNK2019:未解析的外部符号";bool __cdecl测试::GiveMeCookies(bool)"(?GiveMeCookies@Test@@YA_N_N@Z)在函数_main 中引用

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

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

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

应该是这样的:

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

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

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