当我使用关键字内联装饰构造函数时,为什么会出错?

时间:2013-09-11 09:50:20

标签: c++ inline

例如:

#include "ist1.h"
class ist2:public ist1
{
public:
    inline ist2();
    int y;
    void say();

};

我认为关键字“inline”是对编译器而不是命令的明确“建议”,但为什么它会说错误?为什么编译器不会忽略“内联”?

2 个答案:

答案 0 :(得分:1)

inline type func();内(注意;结束时)没有内联代码。

如果定义函数,那将是有意义的,但是:

  • 默认情况下隐藏了类块中的成员函数 (带有正文!)
  • 在类块外部和分离的源中定义的成员函数不得内联(或不能链接)。

因此,显式内联成员函数只有在类块外部但在头部内部定义时才有意义。

inline是编译器的“建议”的想法只是误导和僵化。 (想一想:你“建议”每个平台可以做得更好或其他地方的东西:是不是时候从标准定义中删除这个毫无意义的矛盾?)

inline实际上意味着“此定义可能会在不同的翻译单元中出现多次”。

并且在标头中定义的非模板全局级定义函数(成员或非成员)是必需的。其他一切都只是“噪音”。

答案 1 :(得分:1)

你忘了告诉我们错误是什么;您发布的代码中没有错误。

可能是您从链接器获得了“未定义的引用”(或类似)错误。这是因为必须在每个使用它的翻译单元中定义内联函数,因此,实际上,您必须将定义放在标题中而不是源文件中。

如果错误是别的,那么请告诉我们它是什么。

  

我认为关键字“inline”是编译器的明确“建议”而不是订单

这是一种常见的误解。虽然它可能在编译器决定是否内联它时用作提示,但它也具有语义含义:

  • 只要所有定义都相同,就可以在多个翻译单元中定义内联函数 。正常功能在程序中可能只有一个定义。
  • 必须在使用它的每个翻译单元中定义内联函数