Хорошо, это общий вопрос о нобе:
У меня есть простой метод 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];
~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Во-первых, если вы собираетесь конвертировать NSRect
в NSString
вы, вероятно, хотите NSStringFromRect
.
Однако, если вы хотите отформатировать его самостоятельно, в std::string
, то зачем преобразовывать его в NSString
чтобы снова преобразовать его в std::string
?
Во-вторых, вы пытаетесь присвоить iconpos
которые являются ссылкой на const std :: string. Ты просто не можешь этого сделать.
Если вы хотите конвертировать из NSString
в std::string
вам нужно будет пройти обычную строку C, используя метод NSString
cStringUsingEncoding:
Однако, независимо от того, что вы делаете, вы не можете назначать iconpos
потому что это ссылка на постоянный объект.
Вы должны попробовать что-то вроде этого:
iconpos = [[NSString stringWithFormat: @"%f,%f", rect.origin.x, rect.origin.y] UTF8String];
../../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]; ~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
iconpos.assign([[NSString stringWithFormat: @"%f,%f", rect.origin.x, rect.origin.y] UTF8String]);
?