我想确保我的一个函数在使用时是内联的,但是由于某种原因,我得到了一些我无法理解的错误。我快速地设置了一个测试环境来重现我的错误。下面是:
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 : error LNK2019:未解决的外部符号"bool __cdecl Test::GiveMeCookies(bool)“(?GiveMeCookies@Test@@YA_N_N@Z)在函数_main中引用 User\Desktop\NamespaceTest\Debug\NamespaceTest.exe :致命错误LNK1120: 1未解决的外部因素
有人能解释我为什么不能从我的命名空间内联函数吗?我如何才能解决这个问题,同时保持我的必须强制内联它。
发布于 2015-12-30 00:17:32
所得到的错误与强制行无关。在ns1.cpp中,您的函数不在Test命名空间中。
应该是这样的:
#include "ns1.h"
namespace Test
{
__forceinline bool GiveMeCookies(bool why)
{
return !why;
}
}发布于 2015-12-30 01:02:06
在标题中添加一个外挂似乎解决了这种情况,但是我必须深入研究它,以检查它是否真的是内联的。如果没有,那么我认为我们无法采取任何进一步的步骤,因此这可能是最好的解决方案:
#pragma once
namespace Test
{
extern __forceinline bool GiveMeCookies(bool why);
}https://stackoverflow.com/questions/34521106
复制相似问题