【问题标题】:C++ method wrapping Objective-C: how to add value to variable?包装Objective-C的C ++方法:如何为变量添加值?
【发布时间】:2014-02-14 21:33:50
【问题描述】:

好的,这完全是菜鸟问题:

我有简单的 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];
~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【问题讨论】:

    标签: c++ objective-c webkit node-webkit


    【解决方案1】:

    首先,如果您要将NSRect 转换为NSString,您可能需要NSStringFromRect

    但是,如果您想自己将其格式化为std::string,那么为什么要将其转换为NSString,只是为了再次将其转换为std::string

    其次,您尝试分配给iconpos,这是对 const std::string 的引用。你就是不能那样做。

    如果你想从NSString 转换为std::string,你需要通过一个普通的C 字符串,使用NSString 方法cStringUsingEncoding:

    但是,无论做什么,都不能赋值给iconpos,因为它是对常量对象的引用。

    【讨论】:

      【解决方案2】:

      你应该尝试这样的事情:

      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]);
      • ../../content/nw/src/api/tray/tray_mac.mm:73:11: error: no matching member function for call to 'assign' iconpos.assign([[NSString stringWithFormat: @"%f,%f", rect.origin.x, rect.origin.y] UTF8String]); ~~~~~~~~^~~~~~ /MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1/bits/basic_string.h:927:7: note: candidate function not viable: 'this' argument has type 'const std::string' (aka 'const basic_string<char>'), but method is not marked const assign(const _CharT* __s) ^ 1 error generated. ninja: build stopped: subcommand failed.
      • 正如 Jody Hagins 指出的那样,您正在尝试分配给 const 引用。从标头声明中删除“const”。
      猜你喜欢
      • 1970-01-01
      • 2014-08-26
      • 2011-01-28
      • 2012-01-23
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多