内联函数不能解决歧义

时间:2015-01-29 23:26:34

标签: c++ inline

//myheader.h

namespace abc{
   int func(int x) { return 10 + x;}
   inline int callfunc(int a){ return func(a); }
}


//global.h

int func(int x){ return 10 + x; }

在上面的示例中,编译代码时,即使现在没有在任何地方调用内联函数,它也会返回错误以解决func(int x)的歧义。为什么内联函数不采用namespace abc中已存在的现有定义?

1 个答案:

答案 0 :(得分:0)

  1. 您的错误无法从发布的代码中重现 - 这些标头在包含在单个.cpp文件中时编译没有问题。所以你真的应该发布你的.cpp文件。它是实际编译过的.cpp文件,而不是标题,所以如果没有它们,我们就无法全面了解。
  2. 您应该发布一个实际错误,而不仅仅是您对它的印象。根据您的描述,我们甚至无法确定它是否存在编译器错误或链接器错误。
  3. 尽管如此,我还是会针对您的问题提出一些可能的解决方案。

    1. 尝试在调用func:

      时指定名称空间

      inline int callfunc(int a){ return abc::func(a); }

    2. 你真的不应该在标题中定义非内联函数,如果你将标题包含在多个.cpp文件中,你将会遇到链接器错误。
      所以你应该保留.cpp中的定义和.h文件中的声明只是它的意思。