考虑这段代码

#include <iostream>
#include <cstdio>
using namespace std;

class Dummy {
public:
    Dummy();
};

inline Dummy::Dummy() {
    printf("Wow! :Dummy rocks\n");
}

int main() {
    Dummy d;
}


这里一切都很好!

现在,我进行此修改。我将Dummy的声明移到“ dummy.h”。

class Dummy {
public:
    Dummy();
};


并在“ dummy.cpp”中定义构造函数Dummy()如下

#include "dummy.h"
inline Dummy::Dummy() {
    printf("Wow! :Dummy rocks\n");
}


最后,我的主文件为:

#include <iostream>
#include <cstdio>
#include "dummy.h"
using namespace std;

int main() {
    Dummy d;
}


它编译良好,但是我收到一个链接器错误,抱怨未定义对Dummy :: Dummy()的引用。

任何见解。

-

最佳答案

您必须将所有内联函数(包括方法和构造函数/析构函数)放入标有头文件的位置。

尽管此代码无论哪种方式都可以工作,但main()调用构造函数时就好像inline关键字不存在一样。您确定要将目标文件从两个编译单元传递到链接器吗?

关于c++ - 内联构造函数?解释这种行为[C++],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3124307/

10-11 22:35
查看更多