C++:在多个文件中定义类
C++: Defining class in multiple files
根据一个定义规则(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](,或者如果它已经声明但未在其类定义中定义,则可以在其类定义之外定义。
相关文章:
- 告诉CMake链接到自定义文件夹中的Boost
- 通过cMake使用具有自定义文件扩展名的共享库
- 威纳派读取自定义文件或文件夹的所有访问权限
- 使用命令列表解析自定义文件
- 单独的类声明和方法定义文件问题
- Qt解析自定义文件格式
- 将单独的头文件和类定义文件链接到主函数文件 - G++ 返回重载"undefined reference to"构造函数
- FAT32和NTF中的自定义文件属性
- 如何在没有"fatal error: Wt/WApplication: No such file or directory"的情况下将wt安装到自定义文件夹中
- C++ while 循环在自定义文件结构中
- QT C 读取自定义文件结构
- gcc 是否有编译指示来定义文件类型/编译器
- C/C++ 中的跨平台自定义文件头
- 使用头文件和类定义文件时未解决的外部符号错误
- 将此c++代码分解为单独的类规范文件和函数定义文件
- 自定义文件类中fstream对象的生存期
- 如何使用BinaryReader类使用C#读取自定义文件(C++)
- 提供带有libjpeg的自定义文件IO
- C++模块定义文件头内联符号
- 错误:未定义文件中的第一个引用符号