我有一个Mammal.h文件,内容如下:
#ifndef MAMMAL_H
#define MAMMAL_H
class Mammal
{
public:
void Speak();
};
#endif
我的CPP文件如下:
#include "stdafx.h"
#include "Mammal.h"
#include <iostream>
void Mammal::Speak()
{
using namespace std;
cout << "Speaking";
}
我在这里看到了对此代码的使用:
#include "stdafx.h"
#include "Mammal.h"
int main()
{
Mammal *mammal = new Mammal();
mammal->Speak();
}
但是,我可以在头文件中执行此操作:
#include "stdafx.h"
#include <iostream>
#ifndef MAMMAL_H
#define MAMMAL_H
class Mammal
{
public:
void Speak()
{
using namespace std;
cout << "Speaking";
}
};
#endif
我还没有真正定义偏好...但我确实看到两者都有效。这两种方法都有优缺点吗?
答案 0 :(得分:3)
尝试从多个地方调用该代码 - 因此#include多个源文件中的标题 - 您将在第二种方法中看到问题。如果您对同一函数有多个定义,即使它们相同,链接器也不喜欢它。
答案 1 :(得分:2)
Beta是正确的,当您的标题包含在多个文件中时,在标题文件中定义函数会导致问题。
我还建议你将标题和实现分成单独的文件,这只是一个很好的编码实践。头文件表示类的“接口”。公共函数是类的用户可用的,并且标题为人们提供了一种简洁的方式来查看函数,而无需关心实现。此外,这使您能够在不影响调用者的情况下更改实现,因为它们只包含头,并且实现通常只是一个链接到的库。