我想确保在使用它时我的一个功能被内联,但由于某些原因我得到的错误是我无法理解的。我快速设置了一个测试环境来重现我的错误。这是:
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个未解析的外部
有人能解释一下为什么我不能在命名空间中内联函数吗?我如何解决这个问题,同时保持我必须强制内联它。
答案 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);
}