2015-09-11 3 views
-3

Я пытаюсь написать код, который создает класс прямоугольника, а также создать два класса, которые сравнивают периметр и область двух прямоугольников и возвращают большую из двух. Я продолжаю получать ошибки, что ожидается «;» в тех местах, которые я не думаю, что они принадлежат. Какие-либо предложения?Rectangle Class и Templates C++

#include <cstdlib> 
#include <iostream> 
#include <vector> 
#include <functional> 

using namespace std; 

template <typename Object, typename Comparator> 
const Object & findMax(const vector<Object> & arr, Comparator isLessThan) 
{ 
    int maxIndex = 0; 

    for(int i = 1; i < arr.size(); ++i) 
     if(isLessThan(arr[ maxIndex], arr[ i ])) 
      maxIndex = i; 

    return arr[ maxIndex ]; 
} 

class AreaComparator 
{ 
    public: 
    int compare(Rectangle lhs, Rectangle rhs) const 
    { return double.compare(lhs.getArea(), rhs.getArea()); } 
}; 

class PeriComparator 
{ 
    public: 
    int compare(Rectangle lhs, Rectangle rhs) const 
    { return double.compare(lhs.getPerimeter(), rhs.getPerimeter()); } 
}; 
class Rectangle 
{ 
    double length, width; 

    public: 
    Rectangle(double l, double w) 
    { 
     l = length; 
     w = width; 
    } 
    double getArea() 
    { 
     return length * width; 
    } 
    double getPerimeter() 
    { 
     return (2 * length) + (2 * width); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    cout <<(findMax(new Rectangle[] { new Rectangle(1, 5), new Rectangle(2, 3) }, new AreaComparator())) << endl; 
cout <<(findMax(new Rectangle[] { new Rectangle(1, 5), new Rectangle(2, 3) }, new PeriComparator())) << endl; 

system("PAUSE"); 
delete Rectangle[]; 
delete AreaComparator[]; 
delete PeriComparator[]; 
return EXIT_SUCCESS; 

}

+1

Живой пример [здесь] (http://ideone.com/Kp54xt), похоже, что вам нужно прототип «Прямоугольник». Среди прочего ... много других вещей –

+3

Операторы 'delete' полностью фиктивные, для начало. –

+1

Также 'double.compare' не C++, вы исходите из C#? возможно, вы имеете в виду 'compare (...' –

ответ

0

Любые предложения?

Опираясь на @ комментарии Logicrat, я хотел бы предложить назначая все новые объекты имен локальных переменных, а затем разделив свое cout заявления на более короткие куски (несколько коротких cout «s замене каждой длинной cout). Если проблема ; сохраняется, вам будет легче понять, почему.