Проблема заключается в том, что раньше я перегружал таким методом, а с шаблонными функциями это, как я понял, работает по-другому. Подскажите, пожалуйста, в чем заключается моя ошибка. Мой код:
#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".
Как обычно и бывает в подобных вопросах, в тексте ошибки всё сказано. Не стоит недооценивать компилятор, он всё правильно нашёл. И предполагаю, что даже указал строчку, в которой находится проблема. Вот эту:
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);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не могу понять как подтянуть бинарь буста через cmake, заголовки подключаются, но бинарь не находится, что я написал неправильно? В данном примере...
Не пойму как работает void в с++Где-то читал, что если перед функцией ничего не стоит, то подразумевается что там стоит void