thinking in c++ 的一个练习求教?
chapter 8 :exerciser4:Create a const definition in a header file,include that header file in two .cpp files,then compile those files and link them.You should not get any errors.
我的文件如下:
1.const_test.h:
#ifndef CONST_TEST_H
#define CONST_TEST_H
const int i = 10;
//extern const int i;
#endif
2.Exercise4.cpp:
#include"const_test.h"
//#include"TheOtherCpp.cpp"////////////////////这个去掉注释可以吗?不要下面那句?
#include<iostream>
using namespace std;
extern void f();//////////////////////如果去掉这句用上面那句就会出现i重复定义,
int main() {
cout << "i in the main() is : " << i << endl;
f();
return 0;
}
3.TheOtherCpp.cpp:
#include"const_test.h"
#include<iostream>
using namespace std;
void f() {
cout << "This is in f() : i = " << i << endl;
}
这样是可以运行的,我想问的是按上面的两个注释所说的就不行了,我不知道为什么?i是重复定义了,可否用extern来去掉重复定义呢?在哪个文件如果可以的话?
还有就是我上面的做法,我觉得已经是按题意做了:compile those files and link them.请指教!!!谢谢。
[解决办法]
extern表示这个函数是别处定义的,此处只是声明一下,而并非定义,因此连接时不会发生重复定义错误。
C++语言中通常不应该在一个cpp中include另一个cpp文件,因为cpp文件中大都包括变量或函数的定义,如果多个文件包含同一个cpp文件,则几乎必定发生重定义错误。
事实上也不用多个文件包含,因为在同一个工程中,每一个cpp文件都是要被编译的,你从一个cpp中包含了另一个cpp,既然这两个cpp都会编译,那就等于被包含的那个cpp的内容被编译了两次,因此只要那个cpp中包含任何一个变量或者函数定义,那么就肯定是重定义错误。
通常我们把声明性的东西,以及内联函数、模板等写在头文件中,然后从cpp中包含头文件,不要包含cpp。
[解决办法]
[解决办法]
把CPP里函数定义的声明写到相应的H文件里
其他用到这些函数的文件include 对应的头文件即可~
[解决办法]
学习2楼的
[解决办法]
学习