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

关于外部变量的,问!解决思路

2012-03-11 
关于外部变量的,急问!!!!!!!!!小弟想在程序中使用一个外部的map,程序共有三个文件:test.h,test.cpp,main.c

关于外部变量的,急问!!!!!!!!!
小弟想在程序中使用一个外部的map,程序共有三个文件:test.h,test.cpp,main.cpp代码如下:
/************   test.h   ******************/
#ifndef   TEST_H
#define   TEST_H

#include   <afx.h>
#include   <iostream>
#include   <string>
#include   <utility>
#pragma   warning   (disable:4786)
using   namespace   std;
#include   <map>

typedef   pair <string,   string>   uuid_mxf;
typedef   map <string,   string> ::value_type   valType;

extern   map <string,string>   map_uuid_mxf;       //定义一个外部map,问题所在处,
                                                                                  //不知如何声明外部的map

void   MapMxf(map <string,   string> &   uuidmxf);

class   Test
{
public:
Test()
{

}
Test(string   str)
{
m_str   =   str;
}
string   GetName()
{
return   map_uuid_mxf[m_str];
}
private:
string   m_str;
};

#endif

/*************   test.cpp   ******************/
#include   "test.h "

void   MapMxf(map <string,   string> &   uuidmxf)
{
CFileFind   finder;
BOOL   bWorking   =   finder.FindFile( "*.cpp ");
while   (bWorking)
{
bWorking   =   finder.FindNextFile();

if   (!finder.IsDots())
{
uuid_mxf   temp(string(finder.GetFileName,string(finder.GetFileName()));
uuidmxf.insert(valType(temp));
cout   < <   (LPCTSTR)   finder.GetFileName()   < <   endl;
}
}
}

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

void   main()
{
MapMxf(map_uuid_mxf);
Test   temp( "main.cpp ");
cout < <temp.GetName() < <endl;
}
我这个程序就是想实现如下功能:事先通过MFC的CFileFind类建立当前目录下的.cpp的文件名和其索引(此处为试验简单,用索引对都是文件名)的一个对应关系,然后在Test类的GetName函数中可以通过索引值直接得到文件名。
现在的问题是:我把这三个文件放到一个文件中,并且将extern   map <string,string>   map_uuid_mxf;语句中的extern去掉,程序可以运行。如果将这三个文件分别独立的放并且加上extern就会出现如下链接错误:
Linking...
main.obj   :   error   LNK2001:   unresolved   external   symbol   "class   std::map <class   std::basic_string <char,struct   std::char_traits <char> ,class   std::allocator <char>   > ,class   std::basic_string <char,struct   std::char_traits <char> ,class   std::allocator <char>   > ,stru
ct   std::less <class   std::basic_string <char,struct   std::char_traits <char> ,class   std::allocator <char>   >   > ,class   std::allocator <class   std::basic_string <char,struct   std::char_traits <char> ,class   std::allocator <char>   >   >   >   map_uuid_mxf "   (?map_uuid_mxf@@3V?
$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@A)
Debug/test8011.exe   :   fatal   error   LNK1120:   1   unresolved   externals


Error   executing   link.exe.
现在我觉得是这个外部的map声明存在问题,请各位高手给帮忙看一下,谢谢!
注:我得程序是在VC6.0下建立的控制台程序,为了能够使用MFC类,需要在头文件中添加#include   <afx.h> 并且在project-> setting中设置 "USE   MFC "选项。

[解决办法]
在test.cpp加一句:
map <string,string> map_uuid_mxf;

[解决办法]
extern map <string,string> map_uuid_mxf;
只是在头文件里声明map_uuid_mxf是一个外部变量,但没有定义
所以你还得在test.cpp文件中定义这个变量
map <string,string> map_uuid_mxf;

热点排行