c++多文件组织

来源:百度知道 编辑:UC知道 时间:2024/07/01 06:19:00
大牛看一下这个程序链接时为什么有错:
error LNK2005: "int doc" (?doc@@3HA) already defined in main.obj

//h.h
#ifndef HH
#define HH

#include <iostream>
using namespace std;

int doc = 10;
void f1();

#endif
//end of h.h

//fun1.cpp
#include "h.h"

void f1() {
doc = 5;
}
//endof fun1.cpp

//main.cpp
#include "h.h"

int main() {
f1();
cout << doc << endl;
return 0;
}
//endof main.cpp
必须要把main与其他函数分开到不同的文件里,或者具体的来说,就是:所有的定义都在头文件里,main单独用一个cpp文件,其他函数都在其他的cpp文件里。
请按照这个要求把这个程序改正过来贴上。
谢了!

按照你的要求,这个问题没法解决。
你的fun1.cpp需要用hh.h这个文件,这样就包含了一个doc的定义。
编译时不会报错,因为f1和doc的声明在hh.h中可以找到。
在链接时,从main函数开始,因为碰到了f1函数,要包含hh.h,这样doc已经定义了,但是要找f1函数的定义,又必须再包含一次hh.h,这样doc就被重复定义了。f1中需要使用doc时,提示在main函数已经定义了。

这里函数的声明与实现分开用条件编译可以起到作用,但是对于变量就不行了。

你是用的VC2005编译的吧???
把这些void f1()
{
doc = 5;
}
放到main.cpp里边就OK了。
至于你说的XX.h和XX.CPP的组合方式一般用于类和结构体。

看来lz的c++知识需要恶补啊