0

我正在研究 Visual C++。你能帮忙看看这个语法吗?

  class CVisionSystem
  {
    public:
CVisionSystem();
 ~CVisionSystem(void);


int Init();


    private:

 PvDevice device;
// PvStream object
      PvStream stream;
// Buffer

  CustomPipeline *pipeline;

// GEV Parameters
PvGenParameterArray *deviceParams;
    PvGenInteger *parTLLocked;

 };

int CVisionSystem::Init()
 {
 deviceParams = device.GetGenParameters();    
 parTLLocked = dynamic_cast<PvGenInteger *>( deviceParams->Get( "TLParamsLocked" ) );

 }

deviceParms 获得有效值,但 parTLlocked 获得导致错误的 NULL 值:“无法评估错误表达式,_vfptr CX0030 和 mthis CX0076。

ParTLLocked 可能是什么问题?

4

3 回答 3

1

我猜这会deviceParams->Get( "TLParamsLocked" )返回一个无法动态转换为的类型PvGenInteger *。返回类型应该是指向PvGenInteger该 dynamic_cast 的子类或父类(或可能是同一类)的指针,以返回非空值。

于 2013-01-10T10:04:46.610 回答
1

如果dynamic_cast无法转换为目标类型,则返回空值。你应该检查一下。

要使动态转换成功,被转换的对象必须在其继承树的某处具有目标类类型。也就是说,目标类型必须是运行时对象的实际类型或其父类之一。这意味着您只能向下转换实际上属于目标类型的对象。

于 2013-01-10T10:04:53.423 回答
0
PvGenParameterArray *lDeviceParams = d->lDevice.GetGenParameters();    
lTLLocked = dynamic_cast<PvGenInteger *>( lDeviceParams->Get( "TLParamsLocked" ) );
于 2013-01-10T10:10:49.870 回答