【问题标题】:Compiling a simple header with inline methods用内联方法编译一个简单的头文件
【发布时间】:2013-12-29 08:57:59
【问题描述】:

我有一个基类Student,和一个继承类StudentAtA

我在StudentAtA.h 中定义了StudentAtA,它覆盖了Student 的一些方法。

例如,如果Student 有:

string returnUni() 
{
 return NULL;
};

然后我在StudentAtA.h 内部定义一个覆盖方法:

string returnUni() 
{
 return "A";
};

由于StudentAtA中的所有方法都很短,所以都在头文件中实现(我没有创建StudentAtA.cpp文件)。

现在我有一个Driver.cpp 文件,它使用StudentAtA,并包含一个主函数。这是执行者。

是否可以在没有StudentAtA.cpp 的情况下编译Driver(仅使用标头)?

【问题讨论】:

  • 只要您的编译器可以找到您的方法的定义,它就很高兴。但是不建议将方法体放在头文件中。
  • 即使方法是 1-2 行长? (我是 c\c++ 新手,不熟悉标准)
  • 是的,即便如此:stackoverflow.com/a/4955288/3060253这家伙总结了原因
  • @Glandy 幸运的是,该链接背后的讨论比您的摘要更平衡。头文件中的方法体并没有绝对的问题,它是在更紧密的耦合和为编译器提供更多优化选项之间取得平衡。显然,上面列出的方法应该是virtual,在这种情况下,可能没有理由将它放在标头中,因为它几乎不适合内联。

标签: c++ header compilation


【解决方案1】:

可以。只需确保在 Driver.cpp 中包含 StudentAtA.h

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多