0

for example:

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

};

I think that the keyword "inline" is a explicit "suggestion" to compiler instead of an order,but why it says error ?why the compiler doesn't ignore "inline"?

4

2 回答 2

1

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

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

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

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

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

  • 一个内联函数可以在多个翻译单元中定义,只要所有定义相同。普通函数在程序中可能只有一个定义。
  • 必须在使用它的每个翻译单元中定义内联函数。
于 2013-09-11T11:28:25.227 回答
1

内部inline type func();(注意 ; 最后)没有内联代码。

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

  • 在类块内定义的成员函数(带有主体!)默认情况下是内联的,并且
  • 定义在类块之外和单独源中的成员函数不能被内联(或不能被链接)。

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

inline对编译器来说是“建议”的想法只是误导和荒谬的。(想一想:您“建议”每个平台都可以做得更好或在其他地方做得更好:现在是时候从标准定义中删除这种无意义的矛盾修饰词了吗?)

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

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

于 2013-09-11T10:10:28.167 回答