【发布时间】:2015-04-08 22:40:54
【问题描述】:
我有这段小代码:
文件 modA.h#ifndef MODA
#define MODA
class CAdd {
public:
CAdd(int a, int b) : result_(a + b) { }
int getResult() const { return result_; }
private:
int result_;
};
/*
int add(int a, int b) {
return a + b;
}
*/
#end
文件 calc.cpp
#include "modA.h"
void doSomeCalc() {
//int r = add(1, 2);
int r = CAdd(1, 2).getResult();
}
文件 main.cpp
#include "modA.h"
int main() {
//int r = add(1, 2);
int r = CAdd(1, 2).getResult();
return 0;
}
如果我理解得很好,我们不能在头文件中定义函数并在不同的单元翻译中使用它(除非函数被声明为静态)。宏 MODA 不会在每个单元翻译中定义,因此主体保护不会阻止标题被复制以代替每个 #include "modA.h"。这会导致函数在不同的地方定义,链接器会抱怨它。对吗?
但是为什么可以对类以及类的方法这样做。为什么链接器不抱怨它? 不就是重新定义一个类吗?
谢谢
【问题讨论】:
标签: c++ header-files