2011-09-13 16 views
1

私は[example.cc]方法にしている:php拡張メソッドから文字列を返す方法は?

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

私は[test_php.cc]拡張機能でこれを書いたPHP拡張

からこのメソッドを呼び出すしたいと思います

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);それはうまくいきます。リターン関数として何も印刷しないのは本当です。助けが要る。ありがとう

+0

どのライン79がわかるようにライン番号を入力できますか? – VolatileStorm

+0

これはRETURN_STRING行です – sunset

答えて

2

私はこれを(無学の)答えとして提案します。

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

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

RETURN_STRING(car->accelerate(s) . c_str(), 1); 
+0

thxたくさん!できます。私は新しいt PHPです。ネストされたクラスへのPHP拡張を作成する方法をお尋ねします。私は私のexample.ccの外観を意味します:class a {public:a();クラスb {public:b(); ...変数};}; php_example.ccを作成するには?もう1つの質問はこちらhttp://stackoverflow.com/questions/7398259/how-to-access-a-variable-from-a-class-using-php-extension/7398305#comment-8937444助けてください!! THX VERY MUCH。本当に賞賛する! – sunset

+0

@sunset、私はお詫びしますが、あなたの質問はPHPの質問ではありませんでした。これは純粋にC++の知識とコンパイラエラーの多くの経験から答えられました!私はクラスを入れ子にする必要がなかったので、私はそこでは手伝いできません。幸運にも:)。 – VolatileStorm

+0

2番目の質問はどうですか?どのようにPHPから変数にアクセスするには? thx – sunset

関連する問題