Не могу перегрузить оператор +

231
09 июля 2022, 10:50

Проблема заключается в том, что раньше я перегружал таким методом, а с шаблонными функциями это, как я понял, работает по-другому. Подскажите, пожалуйста, в чем заключается моя ошибка. Мой код:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
#include <iomanip>
using namespace std;
template <class Type1, class Type2>
class myclass {
    Type1 i; Type2 j;
public:
    myclass(Type1 a, Type2 b)
    {
        i = a; j = b;
    }
    void show()
    {
        cout << i << ' ' << j << '\n';
    }
    friend myclass operator + (myclass& o1, myclass& o2);
};
myclass operator + (myclass& o1, myclass& o2) 
{
    return myclass(*this);
}
int main()
{
    setlocale(LC_ALL, "ru");
    myclass<int,double> object(10,10.2);
    object.show();
}

Выдает ошибку: отсутствует список аргументов для шаблон класса "myclass".

Answer 1

Как обычно и бывает в подобных вопросах, в тексте ошибки всё сказано. Не стоит недооценивать компилятор, он всё правильно нашёл. И предполагаю, что даже указал строчку, в которой находится проблема. Вот эту:

myclass operator + (myclass& o1, myclass& o2) 

Теперь осталось сложить в уме текст ошибки и содержание данной строки и можно прийти к выводу, что функция в данном случае описана отдельно от описания класса, а значит, во-первых, перед ней необходимо указать, что она шаблонная с помощью ключевого слова template.

А во-вторых, myclass, использованный в данной функции, – шаблонный класс. А раз так, то он требует указания аргументов шаблона, что и написано в тексте ошибки.

В итоге, код функции примет следующий вид:

template <class Type1, class Type2>
myclass<Type1, Type2> operator + (myclass<Type1, Type2>& o1, myclass<Type1, Type2>& o2)
{
    return myclass(*this);
}
READ ALSO
Как добавить boost thread через cmake?

Как добавить boost thread через cmake?

Не могу понять как подтянуть бинарь буста через cmake, заголовки подключаются, но бинарь не находится, что я написал неправильно? В данном примере...

251
Не пойму как работает void в c++

Не пойму как работает void в c++

Не пойму как работает void в с++Где-то читал, что если перед функцией ничего не стоит, то подразумевается что там стоит void

257
Вытащить json из html

Вытащить json из html

Есть html (это лишь небольшой кусок html)

289