2014-02-14 31 views
0

好了,這是總noob問題:C++方法包裝Objective-C:如何給變量添加值?

我有簡單的C++方法:

void Tray::IconPos(const std::string& iconpos) { 
    NSRect rect = [[[status_item_ view] window] frame]; 
    iconpos = [NSString stringWithFormat: @"%f,%f", rect.origin.x, rect.origin.y]; 
} 

,我想std::string& iconpos獲得此:[NSString stringWithFormat: @"%f,%f", rect.origin.x, rect.origin.y]值。

我該怎麼做?

忍者是給我:

tray_mac.mm:72:11: error: no viable overloaded '=' 
iconpos = [NSString stringWithFormat: @"%f,%f", rect.origin.x, rect.origin.y]; 
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

回答

0

你應該嘗試這樣的事:

iconpos = [[NSString stringWithFormat: @"%f,%f", rect.origin.x, rect.origin.y] UTF8String]; 
+0

仍然是一樣的錯誤::-( '../../content/nw/src/api/tray/tray_mac.mm:72:11:error:no viable overloaded'=' iconpos = [[ NSString stringWithFormat:@「%f,%f」,rect.origin.x,rect.origin.y] UTF8String]; ~~~~~~~^~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~' –

+0

這個怎麼樣: 'iconpos.assign([[NSString stringWithFormat:@「%f,%f」,rect.origin.x,rect。 [] UTF8String]);'? – Atomix

+0

'../../content/nw/src/api/tray/tray_mac.mm:73:11:錯誤:沒有匹配的成員函數調用'assign' iconpos .assign([[NSString stringWithFormat:@「%f,%f」,rect.origin.x,rect.origin.y] UTF8String]); ~~~~~~~~^~~~~~ /嘛cOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/C++/4.2.1/bits/basic_string.h:927:7:注意:候選函數不可行:'this'參數的類型爲'const std :: string'(又名'const basic_string '),但方法未標記爲const assign(const _CharT * _s) ^ 1生成錯誤。 忍者:建立停止:子命令失敗。# –

1

首先,如果你要轉換NSRectNSString你可能想NSStringFromRect

但是,如果您想自己格式化爲std::string,那麼爲什麼要將其轉換爲NSString只是爲了將其再次轉換爲std::string

其次,您正試圖分配給iconpos這是對const std :: string的引用。你不能那樣做。

如果要將NSString轉換爲std::string,則需要使用常規C字符串,並使用NSString方法cStringUsingEncoding:

但是,無論您做什麼,都不能分配給iconpos,因爲它是對常量對象的引用。