Шаблонные функции в с ++ - PullRequest
1 голос
/ 06 марта 2012

Я новичок.Я пробовал эту функцию шаблона в 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 ]

1 голос
/ 06 марта 2012

Без дополнительного контекста из-за ошибки компилятора я не могу быть уверен, но обычно это ошибка, которую вы получаете, если вы пытаетесь объявить функцию как имеющую аргумент некоторого типа, который не находится в области видимости или не былобъявлен.Вы #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 голосов
/ 06 марта 2012

может быть, вам стоит добавить:

#include <vector>
using namespace std;
0 голосов
/ 06 марта 2012

Вы уверены, что не забыли использовать пространство имен std? Попробуйте добавить вверху вашего кода (сразу после включающей части)

using namespace std;
0 голосов
/ 06 марта 2012

Вы не указали фактическую ошибку, поэтому я предполагаю: класс объекта Comparator (какой бы класс real вы не использовали) должен иметь метод isLessThan, определенный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...