C++:在多个文件中定义类

C++: Defining class in multiple files

本文关键字:定义 文件 C++      更新时间:2023-10-16

根据一个定义规则(ODR(:

在整个程序中,对象或非内联函数不能具有 不止一个定义;如果使用对象或函数,则必须 只有一个定义。

这些是我正在尝试编译的文件:

答.cpp

#include <iostream>
#include "Greet.h"
int main()
{
    greet();
    std::cin.get();
}

B.cpp

#include "Greet.h"

问候.h

#include <iostream>
void greet()
{
    std::cout << "Hello World!" << std::endl;
}

我按预期收到链接器错误:

fatal error LNK1169: one or more multiply defined symbols found.

但是当我把greet()函数放在一个类中时。代码编译良好,输出Hello World!

答.cpp

#include <iostream>
#include "Greet.h"
int main()
{
    Greet G;
    G.greet();
    std::cin.get();
}

B.cpp

#include "Greet.h"

问候.h

#include <iostream>
class Greet
{
public:
    void greet()
    {
        std::cout << "Hello World!" << std::endl;
    }
};

为什么链接器不抱怨类Greet的多个定义?

MSVC 和 g++ 的行为是相同的。

但是当我把greet()函数放在一个类中时。代码编译良好,输出Hello World!

在类定义中定义成员函数时,隐含inline。对于非成员函数,情况并非如此。

从C++标准中,class.mfct:

成员函数可以在其类定义中定义([

dcl.fct.def](,在这种情况下,它是一个内联成员函数([dcl.fct.spec](,或者如果它已经声明但未在其类定义中定义,则可以在其类定义之外定义。