2010-03-08 59 views
3

我只是将我的代码从Objective-C切换到Objective-C++。除了两条线以外,一切都会顺利进行。Objective-C中的字符串

NSString * text1=[[NSString stringWithFormat:@"%.2f",ymax] UTF8String]; 

此行抱怨

error: cannot convert 'const char*' to 'NSString*' in initialization 

与第一第二个错误是从线路:

CGContextShowTextAtPoint(context, 2, 8, text1, strlen(text1)); 

它抱怨

error: cannot convert 'NSString*' to 'const char*' for argument '1' to 'size_t strlen(const char*)' 

有什么我错过了差异s在ObjC和ObjC++之间?

回答

7

你想:

const char * text1 = [[NSString stringWithFormat:@"%.2f", ymax] UTF8String]; 

不:

NSString *text1 = [[NSString stringWithFormat:@"%.2f", ymax] UTF8String]; 

(注意的-UTF8String返回值。)

+0

谢谢。这解决了我的问题,但为什么NSString在Obj-C中工作? – 2010-03-08 20:47:31

+3

也许是因为指针转换在C中更为宽松.NSString *是一个指针,毕竟char *也是一个指针,所以它们在没有警告的情况下互相投射。这就是C++发明的静态类型检查。 – 2010-03-08 20:58:10

1

您不能分配一个char *(这UTF8字符串返回到)一个NSString *。对于一般情况这是适用的;然而,C++编译器显然更严格。看起来你的代码只是偶然的运气而编写的;你想把UTF8String的位向下移动一条语句; CGContextShowTextAtPoint(context, 2, 8, text1, strlen([text1 UTF8String]));

2

但是你知道吗,你也可以告诉NSString自己绘制,就像这样?

NSString *text = [NSString stringWithFormat:@"%.2f", ymax]; 

// Send a message to the string to draw itself at the given point with 
// the provided font. 
// 
[text drawAtPoint:CGPointMake(20.0, 30.0) 
     withFont:[UIFont systemFontOfSize:36.0]];