.cpp文件中的C++内联成员函数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (58)

我知道,根据定义,内联成员函数应该进入标头。但是,如果不可能将函数的实现放入标头中呢?

File A.h

#pragma once
#include "B.h"

class A{
    B b;
};

File B.h

#pragma once

class A; //forward declaration

class B{
    inline A getA();
};

B.cpp

#include "B.h"
#include "A.h"

inline A B::getA(){
    return A();
}

编译器会内联吗?

提问于
用户回答回答于

不能超出B.cpp的范围。编译器在每个编译单元基础上运行,也就是说它单独编译每个.cpp文件,所以如果它编译C.cpp,它将没有geta()的代码可用,它将需要执行函数调用并让链接器修复它

用户回答回答于

注意:函数的定义({...}之间的部分)必须放在头文件中,除非函数仅在单个.cpp文件中使用。特别是,如果将内联函数的定义放入.cpp文件中,并从其他.cpp文件中调用它,则链接器将出现“未解决的外部”错误。

扫码关注云+社区

领取腾讯云代金券