objective-c - Obj-C 中的乘法问题

我是 Objective-C 的新手,所以如果这在语言中本质上不起作用,请原谅,但它似乎应该这样做。我想要做的是以英寸为单位计算书籍对象的厚度。以下是 Book 中的对象头文件:

NSString *title, *author;
int *numPages;
/**
 * The thickness of any given page in the book, in inches (e.g. 20lb stock would be 0.0038)
 */
double *pageThickness;
bool *hasHardCover;

这个想法是,我将通过将(页面厚度和页数的乘积)加上(书籍封面的厚度;如果是硬封面,四分之一英寸,四倍页面)来计算书的厚度厚度,如果是平装本)。但是,我在以下实现中遇到了几个错误:
63 -(int *)calculateWidthInInches
64 {
65  return (((double *)numPages) *
66          pageThickness) +
67  (hasHardCover ? 0.25 :
68   (pageThickness * 4.0));
69 }

以下是错误:
/Users/student4/Downloads/LibraryOfBooks/Book.m:66: error: invalid operands to binary * (have 'double *' and 'double *')
/Users/student4/Downloads/LibraryOfBooks/Book.m:68: error: invalid operands to binary * (have 'double *' and 'double')
/Users/student4/Downloads/LibraryOfBooks/Book.m:69: warning: control reaches end of non-void function

我怀疑最后一个是由于编译返回行失败造成的。 我的 calculateWidthInInches 做错了什么方法?

使固定:
63 -(double)calculateWidthInInches
64 {
65  return ((*numPages) * *pageThickness) + (*hasHardCover ? 0.25 : (*pageThickness * 4.0));
66 }

最佳答案

您所有的变量都是指针,而不是值。编译器提示您试图将指针相乘,这是一个没有意义的操作。

您需要在相乘之前取消引用指针,以便将值相乘,而不是值的地址。

编辑:另外,正如 Yuras 指出的那样,直接转换指针并不是一个好主意——取消引用指针,然后转换值:

-(double)calculateWidthInInches
{
    return (((double)*numPages) *
            pageThickness) +
    (*hasHardCover ? 0.25 :
     (*pageThickness * 4.0)); 
}

https://stackoverflow.com/questions/9072243/

相关文章:

opengl - glGetShaderiv()GL_COMPILE_STATUS返回GL_FALS

gwt - 如何解决,Gwt编译错误: refers to missing type “classn

compilation - javassist编译错误没有这样的类

compiler-errors - 为自定义MATLAB工具箱执行编译器脚本时出错

makefile - 在 Fedora 17 中使用 'make' 命令编译时出错

vb.net - 在VB.net故障中引发事件

c# - 编译器不一致的可访问性错误,将嵌套类作为函数参数传递

xml - 使用Perl写入xml时遇到问题

c# - 为什么这一行代码与上面两行不同?

android - java.beans.VetoableChangeListener无法解析