c ++中的模板函数

时间:2012-03-06 07:08:53

标签: c++ templates

我是新手。我在visual studio中尝试了这个模板函数,但是我收到了以下语法错误:

缺少类型说明符 - 假设为int。注意:C ++不支持default-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());
            }
        };

我不知道究竟是什么问题。此函数未在任何类中声明。

4 个答案:

答案 0 :(得分: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的完全限定名称?这可能会解决您的问题。

希望这有帮助!

答案 1 :(得分:0)

你没有给出实际的错误,所以我猜:对象类Comparator(无论你使用的真正的类)需要定义isLessThan方法。

答案 2 :(得分:0)

你确定你没有忘记使用std命名空间吗? 尝试在代码顶部添加(在包含部分之后)

using namespace std;

答案 3 :(得分:0)

也许你应该添加:

#include <vector>
using namespace std;