神奇的异常--vector的使用
今天在使用vector的时候遇到一个编译错误,错误是发生在连接的时候
错误如下:
Error8error LNK2001: unresolved external symbol "public: static class std::vector<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> > > > ZACT_CLS::vec" (?vec@ZACT_CLS@@2V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@A)PRCLACT.obj
Error9fatal error LNK1120: 1 unresolved externalsC:\Trunk\debug\p_zdll32.dll1
现在的情况是我在函数里面定义一个vector的然后再使用它进行push_back的时候是正常的,是不会报错的。但是当我把定义移到一个类里面,然后再在这个函数里面使用push_back就要报错了,纠结半天不知道什么原因,求教了.
下面是这个类的定义:
[code=C/C++][/code]
struct ZACT_CLS{
static ZACT* mnew();
static int read( P_ZFILE File, FP_READFUNC ReadFunc,
long Version, void* Parent, CLASSDATA* PClass, int Change,
void** Return );
static long count( PC_CLASSDATA Class,const void* Parent,
PC_CLASSDATA PClass, int Action );
static void write( P_ZFILE, void*, int );
static void dbrowin( ABUF* Buffer );
static int unchange( void * Act, int Action );
static void *dt_get_real( CLASSDATA* Class,const void* Act, int* Support );
static void makenew( void * Act );
static void *parent( const CLASSDATA * Class, const void* Act );
static CLASSDATA *parclass( const CLASSDATA * Class, const void* Act,
const CLASSDATA * PrevClass );
static ZTYPE status( void* Act );
static int zap( void* Act );
static void *move(PC_CLASSDATA Class,const void* Parent,P_CLASSDATA PClass,
const void* Act, long Move, int Code );
static void *connect( CLASSDATA * Class, void* Act, void* Reference,
int After, void* Parent, CLASSDATA* PClass, int Action );
static void disconnect( CLASSDATA * Class, void* Act, int Action );
static void* clone( const void* Act, int Action );
static int isactnull( const void * Act );
static long row( const CLASSDATA * Class, const void* Act, int Action );
static int add_verify( CLASSDATA* Class, void* Act, void* Parent,
CLASSDATA* PClass, int After, void* Reference,
int Action, int* Reasons );
static int dbrowout( void* Buffer );
static void stowname( GDO* Name, int Action );
static GDO* getname( int Action );
static void change( void* Act, int Action );
static void clear_codes( ZACT* Act );
static void prReOrder( ZGENER* Version, ZACT* Act );
static void *seek( CLASSDATA * Class, void * Parent,
CLASSDATA* PClass, GDO * Key, int Mode, int Action );
static int newcode( ZACT* Activity, CDLST** pCdPtr, int Number, CODE* Code,
CATEGORY* Cat, int Connected, int CheckOnly );
static long gdt( DVALUE* DispValue );
static int assign( void* Activity, CLASSDATA * AClass, void* Value,
CLASSDATA * VClass, void* Index, const CLASSDATA * IClass,
int Action );
static GDO* dt_value( long DataType, void* Activity );
static CLASSDATA* linked_class( CLASSDATA* Class, void* Activity,
CLASSDATA* PrevClass, int Action );
static void *dt_base_support( long DataType, void* Item, CLASSDATA** Class );
static long dt_access( void* Activity, void* Value, CLASSDATA* VClass,
void* Index, CLASSDATA* IClass, void** CItem,
CLASSDATA** CClass );
static int zap_verify( CLASSDATA* Class, void *Activity, int Action );
static int zunloadDur( long Type, ZACT* Act, DBDUR* dbDur );
static void *link( const void * Activity, const CLASSDATA * ChildClass,
int Flavor, int* Offset );
static int range( const void * Activity, long* Start, long* End, long* Target );
static int SeqnoChange( void* Buffer );
static int dt_support( const CLASSDATA * Class, long DataType, int Action );
static CLASSDATA *childclass( const void * Activity, const CLASSDATA * PrevClass );
static int edit_verify( CLASSDATA* Class, long DataType, void *Activity );
static void prAddExtensionFields( ZACT* Activity );
static CLASSDATA *prClAct();
static void prClActHookUp( void );
static CLASSDATA ClassData;
static long *ClassName;
static long *MemberName;
static CLASSDATA *ClassResource, *ClassPool;
static AIU *ActsInUse;
static ACOPY *ListOfCopies;
static NAMECHANGE *NameChanges;
static vector<string> vec;//当我在这个地方定义的时候就出现了那个编译错误
static int ActNameChange( void* Buffer );
static int NoCodes;
static CLASSDATA *ClassVersion, *ClassCAccount, *ClassWorkPack, *ClassActExt,
*ClassGMember, *ClassSGroup, *ClassProject, *ClassPrjCat,
*ClassSet, *ClassCat, *ClassCode, *ClassCalendar,
*ClassDClass, *ClassDV;
static CLASSDATA *Children[7];
static CLASSDATA *ControlledChildren[7];
static CLASSDATA *ChangeChildren[4];
};
下面试这个函数的定义:
[code=C/C++][/code]
int ZACT_CLS::ActNameChange( void* Buffer )
{
static NAMECHANGE *ChangeList = 0;
//static vector<string> vec;-----当我在这个地方定义的时候编译没有问题
for (;;) {
if (ChangeList)
ChangeList = ChangeList->prev;
else
if (NameChanges)
for (ChangeList = NameChanges; ChangeList->next;
ChangeList = ChangeList->next);
if (!ChangeList) return 0;
if ( !(ChangeList->activity->sch.type & 0x18)) {
register ACTSCH *act;
register VERSCH *ver;
act = &ChangeList->activity->sch;
GetLStr( ChangeList->future ? ChangeList->future->oldname : act->name,
BUFP->Name, BUFP->Name + 28 );
ZACT_CLS::vec.push_back(BUFP->Name);//在这个地方使用
GetLStr( ChangeList->oldname, BUFP->OldName, BUFP->OldName + 28 );
ver = act->version;
BUFP->Version = ver->version;
GetLStr( ver->project->name, BUFP->Project, BUFP->Project + 36 );
/* return 1;*/
}
}
return 1;
}
麻烦哪位帮忙看下,谢谢!
[解决办法]
你的这个定义使用了std的命名空间了么?还是使用了什么std::???
[解决办法]
类静态成员变量,需要在类外定义