2013-02-09 62 views
3

帮助我不明白为什么我不能运行这段代码它是一个家庭作业分配和xCode似乎不同意我时,它说我没有定义的功能。看到波纹管在主要的错误“没有匹配的函数调用”模板C++

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

你缺少“诠释与seqEnd”后一个右括号。它是一个错字还是它在你的代码中的错误? – 2013-02-09 23:30:10

+0

是的,这是一个错字,让我修复 – 2013-02-09 23:31:51

+0

我已经为你发布了一个解决方案。看看是否修复它。 – 2013-02-09 23:36:35

回答

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引用。 0127是在表达式末尾过期的临时对象,临时对象不能绑定到非常量引用。

+0

哇谢谢我的教授实际上写了那部分,所以我认为我没有理由怀疑它,这是我正在做的事 – 2013-02-09 23:37:52

+0

另一个解决方法它传递一个左值,即'int x = 0;'然后传递'x'代替。但是,对于内置类型的引用是没有意义的,你应该告诉你的教授签名应该改变。 – 2013-02-09 23:39:20

+0

@JonathanBuzaglo你会惊讶地发现有多少不好的东西试图被教给C++:( – 2013-02-10 00:03:58

0

编译器是正确的。您正在呼叫maxSubsequenceSum1(std::vector<int>&, int, int),你定义maxSubsequenceSum1(std::vector<int>&, int &, int &)

有2个快速解决方案:

1)重新定义你的函数不采取一个参考。
2)将你的常量移动到变量上,并按照这种方式传递它们。

注意:您的代码存在另一个问题。您调用函数maxSubsequenceSum1,但不告诉它要使用的模板参数。

我已纠正,纠正是正确的。该笔记无效。

+2

'但你不告诉它要使用什么样的模板参数。“这不是一个可以推导出来的问题。 – 2013-02-09 23:38:17

+0

@JesseGood你谢谢 – 2013-02-09 23:41:07

+0

谢谢修复它 – 2013-02-09 23:42:20

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; 
+1

谢谢修复它 – 2013-02-09 23:39:25

+0

@ M.Alem你没有解释为什么他应该改变代码还有,这是一个很糟糕的解决方案 – 2013-02-10 00:03:18