我在试图找出以下2行的含义时遇到阻塞问题。以下是gsoap声明的方法声明,我对如何定义finstion的参数感到困惑
SOAP_FMAC3 void SOAP_FMAC4 **soap_serialize_PointerTomss__MobileUserType**(struct soap *soap, mss__MobileUserType *const*a)
所以我正在尝试关注,但无法弄清楚这里的错误是什么。
mss__MobileUserType const *mobile_user_type = setupMobileUsertype();
**soap_serialize_PointerTomss__MobileUserType**(soap , &mobile_user_type);
我在这里做错了什么。
答案 0 :(得分:5)
Type *const* a;
a
是pointer
到const pointer
到Type
。
C ++ const
限定符适用于剩下的内容,如果左侧有内容,则适用于右侧的内容。
更简单地考虑一下。
int a;
int* const p = &a; // (1)
int** pp = &p; // (2) This is not possible since `p` is `const` pointer.
int* const *ppc = &p; // (3) This is your case.
mss__MobileUserType* const mobile_user_type = setupMobileUsertype(); // (1)
mss__MobileUserType* const *mobile_user_type_p = &mobile_user_type; // (3)
soap_serialize_PointerTomss__MobileUserType(soap , mobile_user_type_p);
答案 1 :(得分:1)
您正在调用的函数需要一个指向const指针的指针
到(非常)mss__MobileUserType
。表达方式
&mobile_user_type
是指向const的(非const)指针的指针
mss__MobileUserType
。之间没有隐式转换
他们俩。 (有一个指向const指针的指针也很奇怪
非const,但我不知道库,所以也许有
一个原因。并且具有符号也是未定义的行为
两个连续的下划线。)
答案 2 :(得分:0)
假设您的声明是:
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTomss__MobileUserType(struct soap *soap, mss__MobileUserType *const *a);
然后你需要传递一个const指针的地址:
mss__MobileUserType *const mobile_user_type = setupMobileUsertype();
soap_serialize_PointerTomss__MobileUserType(soap , &mobile_user_type);
答案 3 :(得分:0)
声明可以以可能的cv-qualfied类型说明符开头,例如:
X
const X
X const
然后可以跟随零个更多的ptr声明符,如:
*
* const
每个指定指向前一个类型的指针。 ptr声明符中的const适用于指针,而不适用于类型:
例如:
const X*
X const*
X* const
X const * const
X const **const***
让我们分解:
const X ** const*
这是:
const X - const X
* - pointer to previous
* const - const pointer to previous
* - pointer to previous
所以它是“指向指向const X的指针的指针”