c++ - 内联命名空间函数时出错

标签 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>main.obj : error LNK2019: unresolved external symbol "bool __cdecl Test::GiveMeCookies(bool)" (?GiveMeCookies@Test@@YA_N_N@Z) referenced in function _main

1>C:\Users\Unknown User\Desktop\NamespaceTest\Debug\NamespaceTest.exe : fatal error LNK1120: 1 unresolved externals

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

最佳答案

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

应该是这样的:

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

关于c++ - 内联命名空间函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34521106/

相关文章:

c++ - std::array<T> 初始化

c++ - 这是在 C++11 中将一个 std::vector 的内容移动到另一个的末尾的最有效方法吗?

c++ - 仅在特定类型的数组中添加模板化参数

c++ - 了解在返回值之前和之后使用 EAX 的函数调用

.net - 如何向 VS 2015 vNext .NET 4.x 目标项目添加程序集引用

visual-studio - 如何从命令行升级解决方案和项目文件

c++ - C++中 vector 上的未初始化局部变量错误

c++ - 程序在没有调试符号的情况下崩溃,使用它们运行良好(在任何一种情况下都没有优化或任何东西)

c++ - 如何将一个qt3库完全移植到qt4?

javascript - 在 Visual Studio 2015 中,有没有办法使用 Internet Explorer 以外的浏览器调试 Javascript?