G ++不接受C++中的内联构造函数

Nil*_*esh 2 c++ inline

我有一个问题,可能是愚蠢的.

问题是,我无法在类中内联构造函数.

考虑我有一个名为Foo的类.

如果我写这样的Foo的实现:

class Foo {
  int p;
  public:
    Foo() { p = 1; }
};
Run Code Online (Sandbox Code Playgroud)

或者甚至喜欢这样:

class Foo {
  int p;
  public:
    Foo();
};

inline Foo::Foo() {
  p = 1;
}
Run Code Online (Sandbox Code Playgroud)

该程序将无法编译.

我使用标准方法的类:

Foo obj;
Run Code Online (Sandbox Code Playgroud)

现在当我运行g ++ main.cpp foo.cpp时,我得到:

/tmp/ccyVtxvp.o: In function `main':
main.cpp:(.text+0x17): undefined reference to `Foo::Foo()'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

同时,当我使用相同的代码时,在将类编译为共享库(使用工厂函数返回对象指针)之后,它可以正常工作.

有没有猜到为什么会这样?

Arm*_*yan 5

必须在使用它们的每个源文件中定义内联函数.实现此目的的最简单方法是将函数的定义(主体)放在头文件中,并在函数使用的任何地方包含头文件