首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内联命名空间函数时出错

内联命名空间函数时出错
EN

Stack Overflow用户
提问于 2015-12-30 00:07:25
回答 2查看 179关注 0票数 2

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

Main.cpp:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#include "ns1.h"

__forceinline bool Test::GiveMeCookies(bool why)
{
    return !why;
}

ns1.h:

代码语言:javascript
复制
#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未解决的外部因素

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

EN

回答 2

Stack Overflow用户

发布于 2015-12-30 00:17:32

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

应该是这样的:

代码语言:javascript
复制
#include "ns1.h"
namespace Test
{
  __forceinline bool GiveMeCookies(bool why)
  {
      return !why;
  }
}
票数 2
EN

Stack Overflow用户

发布于 2015-12-30 01:02:06

在标题中添加一个外挂似乎解决了这种情况,但是我必须深入研究它,以检查它是否真的是内联的。如果没有,那么我认为我们无法采取任何进一步的步骤,因此这可能是最好的解决方案:

代码语言:javascript
复制
#pragma once

namespace Test
{
    extern __forceinline bool GiveMeCookies(bool why);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34521106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档