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);它有效..确实它不会打印任何内容作为返回函数。需要一些帮助。欣赏

4

1 回答 1

2

鉴于您最近的评论,我会将此作为(未受过教育的)答案提出。

RETURN_STRING()const char*在它的第一个参数中接受一个。这就是你所说的“C-String”,并且没有从std::string到的自动转换const char *(至少对于编译器而言)。

您要做的是将 aconst char*作为第一个参数传递。要从 std::string 生成 a const char*,请调用 method c_str()。即将你的最后一行更改为:

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