0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 44
1

Слишком много параметров для этой функции оператора

02.06.2020, 18:32. Показов 14173. Ответов 28
Метки нет (Все метки)

Когда пишу переопределение операторов, например + или * или < и пытаюсь передать больше одного параметра, пишет:
"Слишком много параметров для этой функции оператора", хотя во всех примерах в интернете по два аргумента. Например, здесь без 2 аргументов вообще никак:

C++
1
2
3
4
bool operator<(const Triangle &other)
    {
        return this->P < other.P;
    }
Что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2020, 18:32
Ответы с готовыми решениями:

Почему слишком много параметров?
Ошибка error C2804: бинарный &quot;operator ==&quot; имеет слишком много параметров В примере тоже два но...

Ошибка компиляции: Описание: Слишком много параметров; параметр a55 превышает допустимый предел, установленный для парам
Прошу помочь непрограммисту, предложите простое решение. Отладчик пишет: Описание: Слишком много...

Для данной функции введено слишком много аргументов
=ЕСЛИ(C6&lt;0;C6+КОРЕНЬ(1+C6*C6);ЕСЛИ(C6&lt;=1;C6&gt;=0;SIN(C6)*EXP(C6);2*COS(C6)*COS(C6)))

Для данной функции введено слишком много аргументов
Выдает ошибку при выполнении данной функции ...

28
1999 / 1118 / 473
Регистрация: 11.10.2018
Сообщений: 5,707
02.06.2020, 18:39 2
Приведите 1 пример.

Добавлено через 4 минуты
Ну да, там по 2 параметра. Ну попробуйте 2 параметра сделать.
0
0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 44
02.06.2020, 18:45  [ТС] 3
Я же говорю, не работает

Добавлено через 1 минуту
Если бы работало, я бы сюда не писал
0
1999 / 1118 / 473
Регистрация: 11.10.2018
Сообщений: 5,707
02.06.2020, 18:47 4
Что именно? 2 параметра?
0
Модератор
Эксперт С++
12780 / 10235 / 6149
Регистрация: 18.12.2011
Сообщений: 27,403
02.06.2020, 18:47 5
Лучший ответ Сообщение было отмечено Yokai0 как решение

Решение

Если эта функция глобальная (не является членом класса), то параметров нужно два
(первый, который стоит слева от <, а второй - который стоит справа.
C++
1
2
3
4
bool operator<(const Triangle &first, const Triangle &other)
    {
        return first.P < other.P;
    }
Но если эта функция является членом класса, то параметр нужен один,
т.к. первый, который стоит слева от < - это экземпляр класса, от имени которого вызван метод.
а параметр - это экземпляр класса, который стоит справа от <.
C++
1
2
3
4
bool Triangle::operator<(const Triangle &other)
    {
        return this->P < other.P;
    }
3
0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 44
02.06.2020, 18:54  [ТС] 6
Я не дочитал задание. Мне нужно было это реализовать через дружественную функцию. Подскажите как это сделать
0
Модератор
Эксперт С++
12780 / 10235 / 6149
Регистрация: 18.12.2011
Сообщений: 27,403
02.06.2020, 19:14 7
1 вариант
в классе в обьявление добавьте friend:
C++
1
friend bool operator<(const Triangle &first, const Triangle &other);
1
0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 44
02.06.2020, 19:51  [ТС] 8
ваша функция работает прекрасно. Я сделал такую же для знака >, просто поменяв везде меньше на больше. Почему-то не работает

Добавлено через 7 минут
если точнее, выводит меньшее вместо большего только тогда когда меньшее слева от знака сравнения. В других случаях 0

Добавлено через 8 минут
только что обнаружил, что ваша функция тоже работает только когда меньшее значение слева
0
17079 / 9109 / 2229
Регистрация: 30.01.2014
Сообщений: 15,873
02.06.2020, 20:12 9
Yokai0, показывайте как делаете.
0
0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 44
02.06.2020, 21:22  [ТС] 10
Периметр

C++
1
 double P;
Один из конструкторов

C++
1
2
3
4
5
6
7
8
Triangle(double a, double b, double c)
    {
        countO++;
        side[0] = a;
        side[1] = b;
        side[2] = c;
        P = side[0] + side[1] + side[2];
    }
Объявление в классе

C++
1
friend bool operator<(const Triangle& first, const Triangle& other);
функция

C++
1
2
3
4
bool operator<(const Triangle& first, const Triangle& other)
{
    return first.P < other.P;
}
Вызов и выведение результата

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Triangle Egypt(3, 4, 5);
 
    Egypt.Display();
 
    Triangle Egpt(6, 7, 8);
 
    Egpt.Display();
 
    Triangle egypt = Egpt < Egypt;
 
    cout << egypt.getP() << endl;;
 
    Triangle egyp = Egypt < Egpt;
 
    cout << egyp.getP() << endl;
вроде это все

Добавлено через 1 час 3 минуты
ответьте пожалуйста, очень нужно
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
02.06.2020, 21:48 11
C++
1
2
3
4
5
6
7
  Triangle egypt = Egpt < Egypt;
 
    cout << egypt.getP() << endl;;
 
    Triangle egyp = Egypt < Egpt;
 
    cout << egyp.getP() << endl;
Какую смысловую нагрузку должна нести попытка присвоения переменной типа bool объекту типа Triangle? Если нужно присвоить ему меньший из операндов, то можно написать так:

C++
1
Triangle egypt = Egpt < Egypt ? Egpt : Egypt;
УПД во второй строчке того, что я процитировал есть лишний ;, надо бы убрать.
1
0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 44
02.06.2020, 22:07  [ТС] 12
а как тогда вывести периметр меньшего треугольника при соблюдении условия? Я не очень понимаю куда переменная типа буль записывается и что с ней делать

Добавлено через 2 минуты
только что проверил, вашим способом выводит не меньший, а наоборот больший периметр

C++
1
2
3
Triangle egypt = Egpt < Egypt ? Egpt : Egypt;
 
      cout << egypt.getP()<< endl;
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
02.06.2020, 22:08 13
Код Triangle в студию, пожалуйста.
1
0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 44
02.06.2020, 22:09  [ТС] 14
сейчас весь проект кину
0
0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 44
02.06.2020, 22:14  [ТС] 15
вот
Вложения
Тип файла: rar oop6.rar (277.2 Кб, 5 просмотров)
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
02.06.2020, 22:21 16
Я просил код конкретного класса, а не непонятного происхождения экзешник аж 1.2мб объёмом.
1
0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 44
02.06.2020, 22:28  [ТС] 17
там кроме класса ничего нет

Добавлено через 5 минут
Ну если не нравится мой экзешник, то держи

C++
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
class Triangle
{
 
private:
 
    double side[3];
 
    static int countO;
 
    int cons = 3;
 
    double P;
 
public:
 
    int getside() { return side[0]; }
    int getside2() { return side[1]; }
    int getside3() { return side[2]; }
    int getcons() { return cons; }
    int getP() { return P; }
 
    Triangle()
    {
        countO++;
        side[0] = 10;
        side[1] = 11;
        side[2] = 15;
        P = side[0] + side[1] + side[2];
    }
 
 
    Triangle(double a, double b, double c)
    {
        countO++;
        side[0] = a;
        side[1] = b;
        side[2] = c;
        P = side[0] + side[1] + side[2];
    }
 
    Triangle(double a, double b)
    {
        countO++;
        side[0] = a;
        side[1] = b;
        side[2] = a + b - 1;
        P = side[0] + side[1] + side[2];
    }
 
    Triangle(double a)
    {
        countO++;
        side[0] = a * 3;
        side[1] = a * 4;
        side[2] = a * 5;
        P = side[0] + side[1] + side[2];
    }
 
    void Area()
    {
        double p = (side[0] + side[1] + side[2]) / 2;
 
        double S = pow((p * (p - side[0]) * (p - side[1]) * (p - side[2])), 0.5);
 
        cout << "Area is " << S << endl;
    }
 
    void Area(double p)
    {
        double S = pow((p * (p - side[0]) * (p - side[1]) * (p - side[2])), 0.5);
 
        cout << "Area is " << S << endl;
    }
 
    void Angles()
    {
        double rad = 57.2958;
 
        double alpha = acos((pow(side[0], 2) + pow(side[1], 2) - pow(side[2], 2)) / (2 * side[0] * side[1]))* rad;
        double beta = acos((pow(side[0], 2) + pow(side[2], 2) - pow(side[1], 2)) / (2 * side[0] * side[2])) * rad;
        double gamma = acos((pow(side[1], 2) + pow(side[2], 2) - pow(side[0], 2)) / (2 * side[1] * side[2])) * rad;
 
        cout << "Alpha is " << alpha <<endl;
        cout << "Beta is " << beta <<endl;
        cout << "Gamma is " << gamma << endl;
    }
 
    void Perimeter()
    {
        double P = side[0] + side[1] + side[2];
 
        cout << "Perimeter is " << P << endl;
    }
 
 
    void Medians()
    {
        double med1 = 0.5 * pow((2 * pow(side[1], 2) + 2 * pow(side[2], 2) - pow(side[0], 2)), 0.5);
        double med2 = 0.5 * pow((2 * pow(side[0], 2) + 2 * pow(side[2], 2) - pow(side[1], 2)), 0.5);
        double med3 = 0.5 * pow((2 * pow(side[1], 2) + 2 * pow(side[0], 2) - pow(side[2], 2)), 0.5);
 
        cout << "med1 " << med1 << endl;
        cout << "med2 is " << med2 << endl;
        cout << "med3 is " << med3 << endl;
    }
 
    void Add()
    {
        double add;
 
        cout << "Enter the number to add" << endl;
        cin >> add;
 
        for (int i = 0; i < 3; i++)
        {
            side[i] += add;
            cout << side[i]<< endl;
        }
 
    }
 
    void Add(double add)
    {
        for (int i = 0; i < 3; i++)
        {
            side[i] += add;
            cout << side[i] << endl;
        }
    }
 
    Triangle operator+(const Triangle& other)
    {
        Triangle sum;
        sum.side[0] = this->side[0] + other.cons;
        sum.side[1] = this->side[1] + other.cons;
        sum.side[2] = this->side[2] + other.cons;
             return sum;
    }
 
    Triangle operator*(const Triangle)
    {
        int param = 0;
            cout << "Enter the number to multiply  ";
            cin >> param;
        Triangle mult;
        mult.side[0] = this->side[0] * param;
        mult.side[1] = this->side[1] * param;
        mult.side[2] = this->side[2] * param;
        return mult;
    }
 
 
    void Display()
    {
            cout << "The sides of the triangle are: " << side[0] << ", " << side[1] << " and " << side[2] << endl;
    }
 
    void Write()
    {
        cout << "Enter the sides og the triangle: " << endl;
            for (int i = 0; i < 3; i++)
            {
                cin >> side[i];
            }
            cout << endl << "New sides entered successfully"<<endl;
    }
 
    void Write(double new1, double new2, double new3)
    {
        side[0] = new1;
        side[1] = new2;
        side[2] = new3;
 
        cout << endl << "New sides entered successfully"<<endl;
    }
 
    
 
    static void DisplayCount()
    {
        cout << countO << endl;
    }
 
    friend bool operator<(const Triangle& first, const Triangle& other);
 
    //friend bool operator>(const Triangle& first, const Triangle& other);
 
    double& operator[] (const int index);
 
};
 
double& Triangle::operator[] (const int index)
{
    return side[index];
}
 
bool operator<(const Triangle& first, const Triangle& other)
{
    if (first.P < other.P);
    return true;
}
 
//bool operator>(const Triangle& first, const Triangle& other)
//{
//    return other.getP > first.getP;
//}
 
int Triangle::countO;
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
02.06.2020, 22:29 18
Во-первых, каким образом ты предлагаешь мне тебе помочь с кодом, если я этого кода не вижу?
Во-вторых, мне сложно представить, чтобы программка с 1 классом и горсткой операций генерировала экзешник такого объёма. Во вдесятеро меньший объём можно уместить, например, простенький видеокодек
1
0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 44
02.06.2020, 22:30  [ТС] 19
уже сбросил код
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
02.06.2020, 22:40 20
Убери ; после if-конструкции в теле перегрузки оператора сравнения.

УПД я бы посоветовал тебе взять какую-нибудь толковую книжку, из тех, что перечисленны в закреплённой теме и идти по ней. Есть ощущение, что ты бежишь по темам, многое упуская по пути.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2020, 22:40
Помогаю со студенческими работами здесь

ЗУП 2.5. Слишком много фактических параметров
Делаю ВПФ с доп. соглашением к ТД. Ругается вот на это Данные.Вставить (&quot;ДокументРаботника&quot;,...

слишком много аргументов в вызове функции или как создать много файлов на рабочем столе
Мне нужно создать на рабочем столе очень много файлов вот команда для создания 1 файла wchar_t...

Pascal N-IDE, оператор function, ошибка "слишком мало или слишком много аргументов передаются функции arccos"
program gg; uses crt; var x1,x2,x3,x4,y1,y2,y3,y4: integer; a,b,c,d,n,k,l,m:real;...

Ошибка "Для данной функции введено слишком много аругментов"
Здравствуйте, вот выражение, не могу понять, что именно не правильно....

"Для процедуры или функции InsertPerson указано слишком много аргументов."
В чем может быть ошибка? Аргументов кол-во одинаковое, что в коде, что в процедуре, имена одинаковые

Слишком много аргументов у функции
Есть код в main int i, j, y, x1, y1; char f1, f2; ....................... ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru