视觉C++无法正确满足构造函数要求

Visual C++ Can't Properly fill Constructor Requirements

本文关键字:满足 构造函数 C++ 视觉      更新时间:2023-10-16

所以我似乎不能正确地满足这个构造函数的需求。

DIVA_STATUS DIVA_getObjectDetailsList (
IN BOOL                   pFirstTime,
IN time_t                 *initialTime,
IN int                    pListType,
IN int                    pObjectsListType,
IN int                    pMaxListSize,
IN DIVA_STRING            pObjectName,
IN DIVA_STRING            pObjectCategory
IN DIVA_STRING            pMediaName
DIVA_LEVEL_OF_DETAIL      pLevelOfDetail,
IN vector<DIVA_STRING>    listPosition,
OUT vector<DIVA_OBJECT_DETAILS_LIST>      *&pObjectDetailsList
)

问题似乎是输出类向量的最后一行(???)。我对c++有点生疏,所以我想不起来你为什么要取消引用一个引用调用(*&)。

DIVA_OBJECT_DETAILS_LIST是一个类,如下所示:

class DIVA_OBJECT_DETAILS_LIST {
public:
int                            listType;
DIVA_STRING                    siteID;
vector<DIVA_STRING>            *listPosition;
vector<DIVA_OBJECT_INFO>       *objectInfo;
vector<DIVA_OBJECT_TAPE_INFO>  *objectTapeInfo;
};

下面是我尝试使用vc++ 2008 Express编译时得到的结果

1>Compiling...
1>initiator.cpp
1>.initiator.cpp(148) : error C2100: illegal indirection
1>.initiator.cpp(148) : error C2665: 'DIVA_getObjectDetailsList' : none of the 2 overloads could convert all the argument types
1>        z:Mediavault1AutomationDIVA_APIDIVArchiveAPICppAPI TestincludeDIVAapi.h(2191): could be 'DIVA_STATUS DIVA_getObjectDetailsList(bool,time_t,int,int,int,DIVA_STRING,DIVA_STRING,DIVA_STRING,DIVA_LEVEL_OF_DETAIL,std::vector<_Ty>,DIVA_OBJECT_DETAILS_LIST *&)'
1>        with
1>        [
1>            _Ty=DIVA_STRING
1>        ]
1>        while trying to match the argument list '(bool, time_t, int, int, int, DIVA_STRING, DIVA_STRING, DIVA_STRING, DIVA_LEVEL_OF_DETAIL, std::vector<_Ty>, DIVA_OBJECT_DETAILS_LIST *)'
1>        with
1>        [
1>            _Ty=DIVA_STRING
1>        ]
下面是我调用构造函数的方法:
cr = DIVA_getObjectDetailsList (
                   _firstTime,
                   (time_t)_initDate,
                   (int)DIVA_OBJECTS_LIST,
                   (int)DIVA_OBJECTS_CREATED_SINCE,
                   _size,
                   _name,
                   _category,
                   _group,
                   DIVA_INSTANCE,
                   *_listType.listPosition,
                   &*_listType
                   );

_listType是DIVA_OBJECT_DETAILS_LIST。我如何通过引用传递它的指针?

问题似乎出在倒数第二个参数上。当你应该传递一个std::vector<DIVA_STRING>(不是指针)时,你传递了一个std::vector<DIVA_STRING>*

但是为了帮助你理解最后一个参数,vector<DIVA_OBJECT_DETAILS_LIST>*&是一个"指向vector<DIVA_OBJECT_DETAILS_LIST>的指针的引用"类型。也就是说,你应该传递一个指针,它是通过引用传递的。