【问题标题】:Problem calling class methods (Q:1)调用类方法的问题(Q:1)
【发布时间】:2011-02-18 11:22:10
【问题描述】:

我正在尝试将包含一些静态方法的旧“C”程序转换为 Obj-c,但在编译时遇到了一些问题。在我得到的头文件中:

@interface Anneal : NSObject
...
...
+(float)approxInitT;
-(costType)simulatedAnnealing;
...

以及在实现文件中,两个问题的方法(也为简洁起见):

@implementation Anneal

+(float)approxInitT
{
    float T=0.0;
    int m2=0;

    ...

    if(m2==0)
        T = T_LIFESAVER;
    else
        T = T / m2 / log(initProb);
    return T;
}

-(costType)simulatedAnnealing
{
    float T;

    ...

    if(Tset)
        T=initialT;
    else
        T=[self approxInitT]; // error:incompatible types in assignment
}

不幸的是,即使“T”和类方法的返回都是“float”类型,我也会收到“赋值中的类型不兼容”错误。虽然代码包含多个源文件(我预计在接下来的几天里会遇到更多问题),但它们都在同一个源文件中。 这个问题显然是由我调用“approxInitT()”的方式错误引起的,但是到目前为止,互联网搜索还没有发现任何问题的答案。

作为一个新手,我在多模型代码或使用静态/类方法方面没有任何经验,如果能提供任何帮助,我将不胜感激。在此先感谢:-)

【问题讨论】:

    标签: objective-c static-methods


    【解决方案1】:

    类方法不属于类的任何特定实例。因此,尝试将消息传递给类本身 -

    T = [ Anneal approxInitT ];
    

    【讨论】:

    • 啊,还有一个问题从列表中删除了!非常感谢马赫什 :-)
    • 没问题。祝剩下的部分好运。
    【解决方案2】:

    self 引用特定类的实例,但当您调用类方法 (+approxInitT) 时,您必须将消息发送到您的类:T=[Anneal approxInitT]

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 2020-10-10
      • 2012-09-18
      • 1970-01-01
      • 2011-07-24
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多