0

私はObjective-Cで任意に多くの数を平均化する方法に取り組んでおり、これがこれまでの私の方法です。

-(double)average:(double)num, ...
{
    va_list args;
    va_start(args, num);

    double currentAverage = num;
    long long timesAveraged = 1;
    for(double d in args)
        currentAverage = ((currentAverage * timesAveraged) + d) / ++timesAveraged;//Error occurs on this line
    return currentAverage;

}

ただし、コンパイルすると「Selector element does not have a valid object type」というエラーが発生するため、最初の解決策はメソッドを次のように変更することでした。

-(double)average:(double)num, ...
{
    va_list args;
    va_start(args, num);

    double currentAverage = num;
    long long timesAveraged = 1;
    for(NSNumber *d in args)
        currentAverage = ((currentAverage * timesAveraged) + [d doubleValue]) / ++timesAveraged;//Error occurs on this line
    return currentAverage;

}

しかし、今では「」と同じようなエラーが発生しますExpression does not have a valid object type

私は明らかにこれを間違っています。これを正しく行う方法について何か提案はありますか?

解決


私はそのようにメソッドを書くことによってファイルをコンパイルすることができました:

-(double)average:(double)num, ...
{
    va_list args;
    va_start(args, num);

    double currentAverage = num;
    long long timesAveraged = 1;
    for (NSNumber *arg = [NSNumber numberWithDouble:num]; arg != nil; arg = va_arg(args, NSNumber*))
    {
        currentAverage = ((currentAverage * timesAveraged) + [arg doubleValue]) / ++timesAveraged;
    }
    va_end(args);
    return currentAverage;

}
4

1 に答える 1

0

trudyscousinが述べたように、高速列挙はここでは機能しません。va_arg引数リストからデータを抽出するためにも使用する必要があります。詳細については、こちらをご覧ください:http: //cocoawithlove.com/2009/05/variable-argument-lists-in-cocoa.html

于 2012-04-18T20:58:10.893 に答える