2011-09-13 20 views
1

我在[example.cc]的方法:php擴展如何從一個方法返回一個字符串?

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);它的工作..這是真的它不會打印任何東西作爲返回功能。需要一些幫助。欣賞

+0

您能否提供行號,以便我們知道哪一行是79? – VolatileStorm

+0

這是RETURN_STRING行 – sunset

回答

2

鑑於您最近的評論,我會提出這是一個(未受教育)的答案。

RETURN_STRING()在其第一個參數中取const char*。這就是你所說的「C字符串」,並且沒有從std::stringconst char *(至少對於編譯器)的自動轉換。

你想要做的是通過一個const char*作爲第一個參數。要從std :: string生成const char*,請調用方法c_str()。即將您的最後一行更改爲:

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

thx很多!有用。我是新的PHP。我想問你如何創建PHP擴展到嵌套類?我的意思是我的example.cc的樣子:class a {public:a(); class b {public:b(); ...變量};};如何創建php_example.cc?另一個問題在這裏http://stackoverflow.com/questions/7398259/how-to-access-a-variable-from-a-class-using-php-extension/7398305#comment-8937444。請幫忙!! THX非常多。萬分感激!! – sunset

+0

@sunset,我道歉,但(你可能沒有意識到這一點)你的問題不是PHP的問題。這是純粹的C++知識和編譯器錯誤經驗的答案!更重要的是,我從來沒有任何需要嵌套課程,所以我不能在那裏幫助。祝你好運:)。 – VolatileStorm

+0

第二個問題呢?如何從PHP訪問變量? thx – sunset

相關問題