帮助我不明白为什么我不能运行这段代码作为家庭作业,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;
}
答案 0 :(得分: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引用。
答案 1 :(得分:0)
编译器是正确的。您正在调用maxSubsequenceSum1(std::vector<int>&, int, int)
,您定义了maxSubsequenceSum1(std::vector<int>&, int &, int &)
有两种快速解决方案:
1)重新定义您的功能,不参考 2)将常量移动到变量并沿此传递它们。
注意:您的代码还有另一个问题。您调用函数maxSubsequenceSum1,但您没有告诉它使用什么模板参数。
我已经纠正,纠正是正确的。该说明无效。
答案 2 :(得分: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;