首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

thinking in c++ 的一个练习求教?解决办法

2012-02-10 
thinking in c++ 的一个练习求教?chapter 8 :exerciser4:Create a const definition in a header file,inc

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。
[解决办法]

探讨
extern表示这个函数是别处定义的,此处只是声明一下,而并非定义,因此连接时不会发生重复定义错误。

C++语言中通常不应该在一个cpp中include另一个cpp文件,因为cpp文件中大都包括变量或函数的定义,如果多个文件包含同一个cpp文件,则几乎必定发生重定义错误。
事实上也不用多个文件包含,因为在同一个工程中,每一个cpp文件都是要被编译的,你从一个cpp中包含了另一个cpp,既然这两个cpp都会编译,那就等于被包含的那个…

[解决办法]
把CPP里函数定义的声明写到相应的H文件里
其他用到这些函数的文件include 对应的头文件即可~
[解决办法]
学习2楼的
[解决办法]
学习

热点排行