2012-03-06 119 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