Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP(5.5.9)SWIG:如何将指向布尔值的指针作为参数传递? 我使用SPIG(3.0.12)和PHP(5.5.9)来构建以下C++方法(在类算术UIT256):_Php_C++_Pass By Reference_Swig - Fatal编程技术网

PHP(5.5.9)SWIG:如何将指向布尔值的指针作为参数传递? 我使用SPIG(3.0.12)和PHP(5.5.9)来构建以下C++方法(在类算术UIT256):

PHP(5.5.9)SWIG:如何将指向布尔值的指针作为参数传递? 我使用SPIG(3.0.12)和PHP(5.5.9)来构建以下C++方法(在类算术UIT256):,php,c++,pass-by-reference,swig,Php,C++,Pass By Reference,Swig,SWIG将其写入包装器PHP: function SetCompact($nCompact, $pfNegative=null, $pfOverflow=null) { $r=arith_uint256_SetCompact($this->_cPtr,$nCompact,$pfNegative,$pfOverflow); if (!is_resource($r)) return $r; return new arith_uint256($r); } 它编译得很好,

SWIG将其写入包装器PHP:

function SetCompact($nCompact, $pfNegative=null, $pfOverflow=null) {
    $r=arith_uint256_SetCompact($this->_cPtr,$nCompact,$pfNegative,$pfOverflow);
    if (!is_resource($r)) return $r;
    return new arith_uint256($r);
}
它编译得很好,我可以调用该方法,而不需要可选的参数
pfNegative
pfOverflow
。但是,我不知道如何通过ref传递这些布尔参数(传递
null
是可以的,但不知道如何将指针传递到布尔)

在PHP中,调用端不推荐显式传递引用。将引用符号“&”添加到SWIG输出的包装类中的参数也没有帮助

PHP发出:

PHP致命错误:第113行uint256/uint256.PHP中重载的“arith_uint256_SetCompact”没有匹配函数


问题中的SWIG类型是:“SWIGTYPE_p_bool”

为什么可选的参数指针是?它们不应该有合理的默认值吗?@HenriMenke这些是“out”参数。它们是通过引用传入的,可以在例程中设置,以传递比函数返回值更多的信息。没有办法为指针提供“合理的默认值”。此外,我没有编写此代码,也无法预测人们希望与之交互的所有方式,我只是想与之交互。您是否尝试过包含
phppointers.I
?声明说:“因为PHP有一个原生的引用概念,PHP开发人员使用引用来传递指针似乎更自然。要实现这一点,需要包括定义命名typemap REF的phppointers.i。”
function SetCompact($nCompact, $pfNegative=null, $pfOverflow=null) {
    $r=arith_uint256_SetCompact($this->_cPtr,$nCompact,$pfNegative,$pfOverflow);
    if (!is_resource($r)) return $r;
    return new arith_uint256($r);
}