说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

LNK2001难题,高手来看看!在线急等(50)

编辑:说三道四文库 发布时间:2018-04-23 10:00
HTML文档下载 WORD文档下载 PDF文档下载
#ifndef BRANCH_IMPL_H_
#define BRANCH_IMPL_H_
#include <powersystem_skel.h>
#include <STAR/CORBA.h>
#include <map>
class Powernet_impl;
class Branch_impl :virtual public POA_POWERSYSTEM::Branch,
public PortableServer::RefCountServantBase{
public:
...........................
static Powernet_impl*  powernet_ctrl;//定义一个静态变量
////////////////////////////////////////
#ifndef ACLINEBRANCH_IMPL_H_
#define ACLINEBRANCH_IMPL_H_
#include <STAR/CORBA.h>
#include <map>
#include <branch_impl.h>
class Powernet_impl;
class Aclinebranch_impl : public  POA_POWERSYSTEM::Aclinebranch,
                          public  Branch_impl
{......
virtual void r(POWERSYSTEM::ResistanceType)
        throw(CORBA::SystemException);
///////////////////
void Aclinebranch_impl::r(POWERSYSTEM::ResistanceType new_r)
 {
 assert(Acline_set(branch_no, "res",&new_r)==0);
 assert(powernet_ctrl->set_branchinfo(branch_no,from_busno,
 to_busno,"r_para",&new_r)==0);//调用Powernet_impl类的成员函数set_branchinfo()

}      
///////////////////////////////////
powernet_ctrl在main函数中赋给,编译通过,出现LNK2001错误如下:
aclinebranch_impl.obj : error LNK2001: unresolved external symbol "public: static class Powernet_impl *  Branch_impl::powernet_ctrl" (?powernet_ctrl@Branch_impl@@2PAVPowernet_impl@@A)

请大侠们抱不平!!!!!!!!!!!!!!!!!
static Powernet_impl*  powernet_ctrl;//定义一个静态变量

应该在该类的类体之外加一句
Powernet_imple* PortableServer::powernet_ctrl;
是这样的,在c++里面,static成员是需要在class外面赋初值的,比如

class A
{
   static int m;
};

int A::m = 3;
你的程序里面在类中
static Powernet_impl*  powernet_ctrl;//定义一个静态变量
所以必须在类外面对其初始化
static Powernet_impl*  powernet_ctrl;//只是声明一个静态变量,必须在类的外边定义它
Powernet_imple* PortableServer::powernet_ctrl;而且不可以在构造里初始化,要单独的定义!
我是在main()函数中先实例化一个Powernet_impl类,然后赋给powernet_ctrl,这样初始化,行吗?
不可以,一定要定义的。
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘