我在像 这里 这样的地方读到你必须包含 .h 文件而不是 .cpp 文件,否则你会得到一个错误。所以例如
主文件
#include <iostream>
#include "foop.h"
int main(int argc, char *argv[])
{
int x=42;
std::cout << x <<std::endl;
std::cout << foo(x) << std::endl;
return 0;
}
foop.h
#ifndef FOOP_H
#define FOOP_H
int foo(int a);
#endif
foop.cpp
int foo(int a){
return ++a;
}
工作,但如果我用 #include "foop.h"
替换 --- #include "foop.cpp"
我得到一个错误(使用 Dev C++ 4.9.9.2,Windows):
multiple definition of foo(int)
first defined here
为什么是这样?
原文由 user2664110 发布,翻译遵循 CC BY-SA 4.0 许可协议
include
所做的是从文件中复制所有内容(这是<>
或""
中的参数),所以当预处理器完成它的工作时main.cpp
看起来像:因此 foo 将在
main.cpp
foop.cpp
也存在定义,因此编译器由于函数重复而“感到困惑”。