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;。您不能从右值初始化非常量引用。0并且127是在表达式末尾过期的临时对象,临时对象不能绑定到非常量引用。

于 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

您已经声明了一个函数,该函数需要两个整数引用,但您调用的函数需要两个整数值。应该是这样的

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 回答