内联命名空间函数时出错
Error with inlining a namespace function
我想确保我的一个函数在使用时是内联的,但由于某种原因,我遇到了无法理解的错误。我很快设置了一个测试环境来重现我的错误。这是:
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);
}
相关文章:
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- PrintWindow函数在notepad.exe中出错
- 使用运算符调用 void 函数时出错<set>
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 在定义的函数中使用常量时出错
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 使用根/C++时出错:没有匹配的构造函数来初始化'TTree'
- Arduino IDE 中使用 strncmp 函数时出错
- 从DLL导出函数,LoadLibrary()需要用TEXT转换的字符串才能编译而不会出错
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 使用一个参数的模板函数时出错(适用于 2)
- 为什么 stl 字符串C++函数有时出错有时会出错?
- 使用类的构造函数时出错
- 在 c++ 的构造函数中分配对象向量时出错
- 为什么在函数参数前面添加 const 会出错?
- 调用析构函数时出错