【发布时间】:2019-06-12 03:37:05
【问题描述】:
在整个程序中,一个对象或非内联函数不能有 不止一个定义;如果使用一个对象或函数,它必须 只有一个定义。
这些是我正在尝试编译的文件:
A.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!。
A.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++ 的行为相同。
【问题讨论】: