高分求助:父类类变量在子类如何调用?

bboonnee 2008-09-12 07:18:20
Class fun()
{
void f();
}
Class Father()
{
public: fun * pFun;
// public: static fun * pFun;
}
Class Child(): Father
{
void start()
{
(*pFun)->f();
//(*__Super::pFun)->f();

}
}
这里报错:cannot access private member declared in class
我应该如何定义父类的这个类变量而可以直接调用呢?static也不行,__Super也不行
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bboonnee 2008-09-12
  • 打赏
  • 举报
回复
搞定了,是托管的问题

thanks all


托管解决代码:

使用一个类在主类中调用才行
//////////.cpp
#include "StdAfx.h"

#include "PCSWrapper.h"
#include "configuration.h"

//#include "PCS_ProdLog.h"
//#include "PCS_TestLog.h"
//#include "TPM_DATADEF_s.hh"
//#include "PCS_dbConnection.h"

cCBS_ConfigBase* CPCSWrapper::pConfigBase()
{
return m_pConfigBase;
}

CPCSWrapper::CPCSWrapper(cCBS_ConfigBase* pConfigBase)
{
m_pConfigBase = pConfigBase;
}

////.h

#pragma once

//class cPCS_dbConnection;
class cCBS_ConfigBase;

#ifdef __TCM_SUBPROVIDER_BASE_DLL__
#define __TCM_SUBPROVIDER_DECLSPEC__ __declspec(dllexport)
#else
#define __TCM_SUBPROVIDER_DECLSPEC__ __declspec(dllimport)
#endif

public class __TCM_SUBPROVIDER_DECLSPEC__ CPCSWrapper
{
private:

//cPCS_dbConnection* m_databaseConnection;
cCBS_ConfigBase* m_pConfigBase;

public:

CPCSWrapper(cCBS_ConfigBase* pConfigBase);

cCBS_ConfigBase* pConfigBase();

};


bboonnee 2008-09-12
  • 打赏
  • 举报
回复
哎,还是不行我源程序是做CORBA的,这个写得只是表达一个意思,不是很完整

给大家贴一下我的原来的代码吧。。。
还有个猜测是不是2005托管代码的问题?
因为cobra的代码一般好像都是非托管的

template <class CorbaInterface> class cCBS_CorbaProxy : public cCBS_CorbaBase
{
public:
virtual int bind()
throw( cCBS_App_ExcCorbaSystem, // RETHROW_CORBA_SYSTEM_AS_CBS_EXCEPTION
cCBS_Exception, // no IOR available by NamingService
CORBA::SystemException // no CATCH_CORBA_SYSTEM_EXCEPTIONS
);
}

public ref class SubProviderBaseCPP : SubProviderBase
{
public:
cCBS_CorbaProxy <IMST::HMIIntrf>* ifMSTHMI;
}

public ref class CastPreparation : public SubProviderBaseCPP
{
bool CastPreparation::Initialize(iInitializer^ pInitializer)
{

ifMSTHMI = new cCBS_CorbaProxy <IMST::HMIIntrf>("IMST_Hmi", corbaMode, pConfigBase);
ifMSTHMI ->bind();
return true;

}

}
zoroz 2008-09-12
  • 打赏
  • 举报
回复
帮顶
rookieme 2008-09-12
  • 打赏
  • 举报
回复
完整修改如下:
class fun
{
public:
void f(){};
};
class Father
{
public: fun* pFun;
// public: static fun * pFun;
};
class Child:public Father
{
void start()
{
pFun->f();
//(*__Super::pFun)->f();

}
} ;
brallow 2008-09-12
  • 打赏
  • 举报
回复
问题不在于父子类之间的关系吧?
(*pFun)这是可以访问的,问题在于这里:
->f();
默认情况下C++中的类是private的。
Class fun()
{
void f();
}
这f()是私有的,你要在这里改一下:
Class fun()
{
public :
void f();
}
rookieme 2008-09-12
  • 打赏
  • 举报
回复
加上public
Class Child():public Father
{
void start()
{
(*pFun)->f();
//(*__Super::pFun)->f();

}
}

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧