| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1038 人关注过本帖
标题:VC中的全局对象要怎做声明?
只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
已结贴  问题点数:20 回复次数:3 
VC中的全局对象要怎做声明?
例如:
<AAA.h>中
CString a,b,c;    //全局对象
bool SplitFile(bool,bool); //Function head

<stdafx.h>中
#include "AAA.h"

<BBB.cpp>中
#include "stdafx.h"
void C123Dlg::OnOpenFile()
{
    CFileDialog dlg(true);
    CString msg = dlg.GetPathName();
    控件对象.SetWindowText(msg);
    a=msg;
    int i=a.ReverseFind("\\");
    int j=a.GetLength()-i;
            
    b=a.Mid(0,i) + "\\";
    c= dlg.GetFileTitle();
    UpdateData(false);

    if (QQQ(True,True)!=True)
    {
        .....
    }
    ......
}

<CCC.cpp>中
#include "stdafx.h"
bool QQQ(bool ss,bool dd)    //这段主要做单档(>1GB)切割成批次档用~
{
    CFile m_file;
    CFileDialog dlg(TRUE);
    CString AA,BB,CC;
    AA=a;BB=b;CC=c;
    .......
}

为何这样写Compliar时一直出现
.....CString a already defined in StdAfx.obj
.....CString b already defined in StdAfx.obj
.....CString c already defined in StdAfx.obj

非得要用局域对象当参数传递才会正常?
不太懂MFC~越写越像C~
只要设成全局就一定Error!

[ 本帖最后由 wube 于 2012-2-8 19:40 编辑 ]
搜索更多相关主题的帖子: 声明 void include false 
2012-02-08 19:39
红色警戒
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:19
帖 子:444
专家分:2967
注 册:2005-11-20
收藏
得分:5 
本cpp文件中可直接饮用,其它cpp文件中要先用extern声明,如:extern CString a;

2012-02-08 23:56
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:15 
全局变量的两种声明和定义方式:
1,在头文件中声明和定义;其他.cpp文件中只需包含该头文件即可。
但需注意该头文件只能被展开一次,即被 cpp包含的次数只能一次。
楼主的代码将头文件放在预编译头文件中,该预编译分别被包含在了 aaa.cpp和ccc.cpp中 则在代码解析时生成obj时(即aaa.obj和ccc.obj都会包含了 StdAfx.obj,而 StdAfx.obj
包含了CString a,b,c; 的声明和定义,于是出现了重定义的错误)。消除该重定义(方法一:梳理头文件包含的层次关系(让其只被展开一次)。方法二:在link的命令行添加/force命令(忽略掉重定义))

2,在.cpp中声明和定义,在头文件中用extern 导出,这样其他.cpp文件只需包含该头文件 即可调用该全局变量。
2012-02-09 08:45
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
所以CString这个类在整个工程中只能被定义一次~
其他地方需要引用相同类时需要加上引用符号~
程序才有办法辨别两者类是相同的意思~
新档内的类因为要继承原类原本资料~
增加的类名只是原类的一个别名的意思吧?

看来我把类和一般变量用法搞混了~

不要選我當版主
2012-02-09 09:38
快速回复:VC中的全局对象要怎做声明?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023617 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved