2012-03-06 109 views
1

我是一個新手。我試圖在Visual Studio這個模板的功能,但我發現了以下語法錯誤:C++中的模板函數

缺少類型說明符 - 假定爲int。注意:C++不支持默認int

template <typename Object,typename Comparator> 
     const Object & findMax(const vector<Object> &a, Comparator comp) 
     { 
      int maxIndex = 0; 
      for(int i = 1; i < a.size(); i++){ 
       if(comp.isLessThan(a[maxIndex], a[i])) 
        maxIndex = i; 
      } 
      return a[maxIndex]; 
     } 
     class LessThanByWidth { 
     public: 
      bool isLessThan(const Rectangle &a, const Rectangle &b) const{ 
       return (a.getWidth() < b.getWidth()); 
      } 
     }; 

我不知道到底是什麼問題。這個函數沒有在任何類中聲明。

+2

你是如何使用的模板?單獨留下它不會被編譯或生成任何代碼(並且看起來是正確的)。 – 2012-03-06 07:13:29

+1

它適用於g ++(帶有ints向量和簡單的比較器)。你能顯示呼叫代碼嗎? – Vlad 2012-03-06 07:14:10

+1

顯示你稱之爲的位置。 – Griwes 2012-03-06 07:15:14

回答

1

沒有從編譯器錯誤多一點,我不能肯定,但是這通常是你,如果你嘗試聲明功能有一些類型的參數,是不是在範圍或還沒有錯誤已被宣佈。您的#include <vector>在您的計劃的頂部嗎?如果你沒有,你可以嘗試重寫功能

template <typename Object,typename Comparator> 
    const Object & findMax(const std::vector<Object> &a, Comparator comp){ 
     int maxIndex = 0; 
     for(int i = 1; i < a.size(); i++){ 
      if(comp.isLessThan(a[maxIndex], a[i])) 
       maxIndex = i; 
     } 
     return a[maxIndex]; 
    } 

明確地使用vector的完全限定的名字嗎?這可能會解決您的問題。

希望這會有所幫助!

+0

感謝您的回覆。我在模板實現類中犯了一個錯誤。這就是這個錯誤的原因。現在解決它。再次感謝。 – Pavithra 2012-03-06 08:31:11

0

你沒有給實際的錯誤,所以我猜測:Object類Comparator(無論你是使用真正類)需要定義isLessThan方法。

+0

感謝您的回覆。我確實實施了這種方法。但是我在使用這個模板的課上犯了一個錯誤。現在解決它。再次感謝。 – Pavithra 2012-03-06 08:32:03

0

你確定你沒有忘記使用std命名空間? 嘗試(包括該部分後右)

using namespace std; 
+2

這是僅在cpp文件中推薦的做法;在頭文件中,它可能會對您的(或其他)項目造成嚴重破壞。 更喜歡使用前綴std :: – 2012-03-06 07:39:41

+0

他根本沒有討論頭文件,所以當然他只應該在cpp文件中使用它。對不起。 – seveves 2012-03-06 07:53:28

+0

感謝您的回覆。我已經將它包含在我的標題中了。其實這個錯誤並不是因爲這個模板,我發現我在模板的實現類中犯了一個錯誤。現在解決它。 – Pavithra 2012-03-06 08:30:10

0

也許你應該添加添加在你的代碼的頂部:

#include <vector> 
using namespace std; 
+2

請不要推薦「using namespace std」,特別是新手,因爲如果在頭文件中使用這種做法是危險的。 – 2012-03-06 07:38:46