首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • thinking in c++ 的一个练习求教?
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-13 23:27:16 楼主
    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.请指教!!!谢谢。
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-13 23:45:091楼 得分:0
    extern表示这个函数是别处定义的,此处只是声明一下,而并非定义,因此连接时不会发生重复定义错误。

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

    通常我们把声明性的东西,以及内联函数、模板等写在头文件中,然后从cpp中包含头文件,不要包含cpp。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 11:58:572楼 得分:0
    Thanks,I got it.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 12:38:243楼 得分:0
    2楼说的很明白了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 12:46:344楼 得分:0
    引用 1 楼 steedhorse 的回复:
    extern表示这个函数是别处定义的,此处只是声明一下,而并非定义,因此连接时不会发生重复定义错误。

    C++语言中通常不应该在一个cpp中include另一个cpp文件,因为cpp文件中大都包括变量或函数的定义,如果多个文件包含同一个cpp文件,则几乎必定发生重定义错误。
    事实上也不用多个文件包含,因为在同一个工程中,每一个cpp文件都是要被编译的,你从一个cpp中包含了另一个cpp,既然这两个cpp都会编译,那就等于被包含的那个…
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 12:53:055楼 得分:0
    把CPP里函数定义的声明写到相应的H文件里
    其他用到这些函数的文件include 对应的头文件即可~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 15:00:296楼 得分:0
    学习2楼的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 16:31:187楼 得分:0
    学习
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved