1

[example.cc]にメソッドがあります:

std::string Car::accelerate (std::string n)
{
cout<<n<<endl;
return n;
}

このメソッドをphp拡張機能から呼び出したい

私はこれを[test_php.cc]拡張子に書きました:

 char *strr=NULL;
 int strr_len;
 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &strr, &strr_len) == FAILURE) {
        RETURN_NULL();
  }
  std::string s(strr);
RETURN_STRING(car->accelerate(s),1);

次のエラーがあります:

warning: deprecated conversion from string constant to ‘char*’
/home/me.cc:79: error: cannot convert ‘std::string’ to ‘const char*’ in initialization
/home/me.cc: At global scope:warning: deprecated conversion from string constant to ‘char*’

単純な呼び出しでreturn_string(..)_を変更した場合car->accelerate(s); それは動作します..それはreturn関数として何も出力しないのは本当です。助けが要る。感謝

4

1 に答える 1

2

あなたの最近のコメントを踏まえて、私はこれを(教育を受けていない)答えとして提案します。

RETURN_STRING()は、const char*最初のパラメーターを取ります。これを「C-String」と呼び、からstd::stringへの自動変換はありませんconst char *(少なくともコンパイラーの場合)。

あなたがしたいことはconst char*、最初の引数としてaを渡すことです。const char*std :: stringからを生成するには、メソッドを呼び出しますc_str()。つまり、最後の行を次のように変更します。

RETURN_STRING(car->accelerate(s) . c_str(), 1);
于 2011-09-13T11:25:50.127 に答える