3

このコードのスニペットを実行できない理由がわかりません。これは宿題のためであり、関数を定義していないと xCode が同意しないようです。エラーについては、メインの以下を参照してください

template <class Comparable>
Comparable maxSubsequenceSum1( const vector<Comparable> & a, int & seqStart, int & seqEnd){
        int n = a.size( );
        Comparable maxSum = 0;

        for( int i = 0; i < n; i++ )
            for( int j = i; j < n; j++ )
            {
                Comparable thisSum = 0;
                for( int k = i; k <= j; k++ )
                    thisSum += a[ k ];

                if( thisSum > maxSum )
                {
                    maxSum = thisSum;
                    seqStart = i;
                    seqEnd = j;
                }
            }

        return maxSum;

}



int main(){


        vector<int> vectorofints;
        vectorofints.resize(128);
        for (int i=0; i<vectorofints.size(); i++){
            vectorofints[i] = (rand() % 2001) - 1000;
        }
        maxSubsequenceSum1(vectorofints, 0, 127) //**---->the error i get in xcode is "No matching function for call to maxSubsequenceSum1"

        return 0;
}
4

3 に答える 3

2

から署名を変更します

Comparable maxSubsequenceSum1( const vector<Comparable> & a,
                               int & seqStart, int & seqEnd)

Comparable maxSubsequenceSum1( const vector<Comparable> & a, 
                                 int seqStart, int seqEnd)

を実行すると、同じ問題が発生しますint & i = 0;。右辺値から非 const 参照を初期化することはできません。0および127式の最後で有効期限が切れる一時オブジェクトであるため、一時オブジェクトは非 const 参照にバインドできません。

于 2013-02-09T23:33:47.450 に答える
0

コンパイラは正しいです。あなたは を呼び出しmaxSubsequenceSum1(std::vector<int>&, int, int)ています、あなたが定義しましたmaxSubsequenceSum1(std::vector<int>&, int &, int &)

2 つの簡単な解決策があります。

1) 参照を取らないように関数を再定義します。
2)定数を変数に移動し、そのように渡します。

注: コードには別の問題があります。関数 maxSubsequenceSum1 を呼び出しますが、使用するテンプレート パラメーターを指定しません。

私は修正されており、修正は正しいです。メモが無効です。

于 2013-02-09T23:34:00.177 に答える
0

2 つの整数参照を期待する関数を宣言しましたが、呼び出している関数は値によって 2 つの整数を取ります。このようになるはずです

vector<int> vectorofints;
        vectorofints.resize(128);
        for (int i=0; i<vectorofints.size(); i++){
            vectorofints[i] = (rand() % 2001) - 1000;
        }
        int k = 0;
        int j = 127;
        maxSubsequenceSum1(vectorofints, k, j) 

        return 0;
于 2013-02-09T23:34:35.870 に答える