Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Использование абстрактного класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Умножение в двоичной системе http://www.cyberforum.ru/cpp-beginners/thread1194920.html
Добрый вечер. Помогите с реализацией умножения в двоичной системе. Дано два массива, например 1111 и 1111. Как написать цикл умножения друг на друга? Добавлено через 56 минут Я так понимаю нужно...
C++ Создать класс TIME для работы со временем создать класс ВРЕМЯ,разработав следующие элементы класса: •Поля с;(временной интервал,заданный в секундах) •Конструктор,позволяющий создать экземпляр класса. •Методы позволяющие: вывести... http://www.cyberforum.ru/cpp-beginners/thread1194910.html
Графики функций C++
Все придельно пирепутано. Ошибки многочислены. Я в общем с большим трудом секу саму тему. Мало того я вовсе перестал понимать что я уже правлю. Вот проект. Надо (хочу) написать прогу, которая будет...
C++ Посчитать рекурсивным методом значение математической зависимости
Посчитать рекурсивным методом значение математической зависимости. Функция Аккермана для неотрицательных чисел m и n. http://cs618226.vk.me/v618226581/b605/-PGAnV8NUXQ.jpg
C++ Удалить первое слово в строке http://www.cyberforum.ru/cpp-beginners/thread1194893.html
Дан массив строк текста, массив разделителей нужно удалить первое слово и разделитель после в каждой строке него. вывести преобразованый массив Прошу помощи, немогу разобраться с удалением слова
C++ поиск элемента Помогите в программе реализовать поиск элемента #include <iostream> #include <algorithm> using namespace std; template <class T> void sort(T arr, int size) { for (int i = 0; i < size;... подробнее

Показать сообщение отдельно
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632

Использование абстрактного класса - C++

31.05.2014, 20:42. Просмотров 463. Ответов 2
Метки (Все метки)

Доброго времени. Использую абстрактный класс Algorithm с абстрактным методом Calculate() и 5 производных от него классов, реализующих тот или иной алгоритм и возникла непонятная проблема.
Компилятор пишет, что
C++
1
2
3
4
error: prototype for 'void AverageCriterionAlgorithm::Calculate(const QList<QString>&, QList<QString>, Result&)' does not match any in class 'AverageCriterionAlgorithm'
 
error: candidate is: virtual void AverageCriterionAlgorithm::Calculate(const QList<QString>&, const QList<QString>&, Result&)
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
то есть он не видит объявление функции в классе.

.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#ifndef CRITERIA_H
#define CRITERIA_H
 
#include <QVector>
#include <QMap>
#include <QString>
 
 
#include "DataStructures.h"
 
class Solution;
 
class Algorithm {
public:
//    Algorithm();
 
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result) = 0;
};
 
class AverageCriterionAlgorithm : public Algorithm
{
public:
   AverageCriterionAlgorithm();
 
   virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
};
 
class WaldAlgorithm : public Algorithm
{
public:
    WaldAlgorithm();
 
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
};
 
class HurwitzAlgorithm : public Algorithm
{
public:
    HurwitzAlgorithm();
 
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
};
 
class WeightedCriterionAlgorithm : public Algorithm
{
public:
    WeightedCriterionAlgorithm();
 
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
};
 
class SelectionByMainCriterion : public Algorithm
{
public:
    SelectionByMainCriterion();
 
    virtual void Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result);
};
 
//class SelectionByImportance : public Algorithm
//{
//public:
//    SelectionByImportance();
 
//    virtual float Calculate(const QList<QString>& solutions, const QList<QString>& criteria, Result& result) override;
//};
 
//class SelectionByBenefit : public Algorithm
//{
//public:
//    SelectionByBenefit();
 
//    virtual float Calculate(Solution* solution, const QList<QString>& criteria) override;
//};
 
#endif // CRITERIA_H


.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "Algorithms.h"
#include "Solution.h"
 
#include <QtAlgorithms>
#include <algorithm>
#include "SolutionManager.h"
#include "AlgorithmManager.h"
 
 
void AverageCriterionAlgorithm::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
    int criteriaCount = criteria.size();
 
    for(auto& solutionName: solutions) {
        auto solution = SolutionManager::GetInstance()->GetSolution(solutionName);
 
        float sum = 0.f;
 
        for(auto& criterion: criteria) {
            sum += solution->GetCriterionValue(criterion);
        }
 
        sum /= criteriaCount;
 
        result.Results.insert(solutionName, sum);
    }
 
    auto values = result.Results.values();
 
    auto greatest = std::max_element(values.begin(), values.end());
 
    // first element will be a greatest
    result.ChoosedSolutions = result.Results.keys(*greatest);
}
 
void WaldAlgorithm::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
    for(auto& solutionName: solutions) {
        auto solution = SolutionManager::GetInstance()->GetSolution(solutionName);
 
        QList<float> values;
 
        for(auto& criterion: criteria) {
            values.push_back(solution->GetCriterionValue(criterion));
        }
 
        auto iter = std::min_element(values.begin(), values.end());
 
        result.Results.insert(solutionName, *iter);
    }
 
    auto values = result.Results.values();
 
    auto greatest = std::max_element(values.begin(), values.end());
 
    result.ChoosedSolutions = result.Results.keys(*greatest);
}
 
void HurwitzAlgorithm::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
    float param = AlgorithmManager::GetInstance()->GetHurwitzParameter();
 
    for(auto& solutionName: solutions) {
        auto solution = SolutionManager::GetInstance()->GetSolution(solutionName);
 
        QList<float> values;
 
        for(auto& criterion: criteria) {
            values.push_back(solution->GetCriterionValue(criterion));
        }
 
        auto smallest = std::min_element(values.begin(), values.end());
        auto greatest = std::max_element(values.begin(), values.end());
 
        float calculation = param * (*smallest) + (1 - param) * (*greatest);
 
        result.Results.insert(solutionName, calculation);
    }
 
    auto values = result.Results.values();
 
    auto greatest = std::max_element(values.begin(), values.end());
 
    result.ChoosedSolutions = result.Results.keys(*greatest);
}
 
void WeightedCriterionAlgorithm::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
    for(auto& solutionName: solutions) {
        auto solution = SolutionManager::GetInstance()->GetSolution(solutionName);
 
        float sum = 0.f;
 
        for(auto& criterion: criteria) {
            float value = solution->GetCriterionValue(criterion);
            float coef  = solution->GetCriterionWeightCoef(criterion);
 
            sum += value * coef;
        }
 
        result.Results.insert(solutionName, sum);
    }
 
    auto values = result.Results.values();
    auto greatest = std::max_element(values.begin(), values.end());
 
    result.ChoosedSolutions = result.Results.keys(*greatest);
}
 
void SelectionByMainCriterion::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
    QString mainCriterion = SolutionManager::GetInstance()->GetMainCriterionName();
 
    for(auto& solutionName: solutions) {
        auto solution = SolutionManager::GetInstance()->GetSolution(solutionName);
 
        float value = solution->GetCriterionValue(mainCriterion);
        float threshold = solution->GetCriterionThreshold(mainCriterion);
 
        if(value >= threshold) {
            result.Results.insert(solutionName, value);
        }
    }
 
    auto values = result.Results.values();
    auto greatest = std::max_element(values.begin(), values.end());
 
    result.ChoosedSolutions = result.Results.keys(*greatest);
}
 
//float SelectionByImportance::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
 
//}
 
//float SelectionByBenefit::Calculate(const QList<QString>& solutions, QList<QString> criteria, Result& result) {
 
//}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru