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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
HenryDukart
 Аватар для HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
#1

Не удалось вывести аргумент шаблон - C++

10.04.2014, 19:12. Просмотров 633. Ответов 12
Метки нет (Все метки)

С такой проблемой сталкиваюсь не первый раз. Есть класс, в котором реализованы операторы сравнения меньше и равенство. Как я знаю, этого достаточно для того, чтобы компилятор сам смог составить остальные операторы сравнения из этих двух. Но у меня ругается, что не может. В чем заключается проблема?
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
class author
{
private:
    string surname;
    string name;
    string otch;
public:
    bool operator == (const author& a2)
    { return (surname==a2.surname && name==a2.name &&otch==a2.otch);}
    bool operator < (const author& a2)
    {
        if (surname<a2.surname)
            return true;
        if (surname==a2.surname && name<a2.name)
            return true;
        if (surname==a2.surname && name==a2.name && otch<a2.otch)
            return true;
        return false;
    }
    friend ostream& operator << (ostream& out, const author& a)
    {
        out<<a.surname<<" "<<a.name<<" "<<a.otch;
        return out;
    }
    friend istream& operator >> (istream& in, author& a)
    {
        cout<<"Введите ФИО автора: ";
        in>>a.surname>>a.name>>a.otch;
        return in;
    }
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2014, 19:12     Не удалось вывести аргумент шаблон
Посмотрите здесь:

C++ аргумент с++
C++ Третий аргумент strrok_s
C++ создать шаблон класса,реализующий буфер из произвольного (5) числа вещественных чисел. Числа ввести с клавиатуры содержащие буфера вывести на экран
C++ Шаблон класса должен давать возможность вывести все элементы множества на экран, сложение, вычитание, осуществлять пересечение множеств
Безымянный аргумент функции C++
Const аргумент изменяется C++
C++ Не читается аргумент функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 647
Завершенные тесты: 1
10.04.2014, 19:19     Не удалось вывести аргумент шаблон #2
Весь код покажи
DrOffset
6820 / 4031 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
10.04.2014, 19:28     Не удалось вывести аргумент шаблон #3
Цитата Сообщение от HenryDukart Посмотреть сообщение
Как я знаю, этого достаточно для того, чтобы компилятор сам смог составить остальные операторы сравнения из этих двух.
Нет, это не так.
HenryDukart
 Аватар для HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
10.04.2014, 19:28  [ТС]     Не удалось вывести аргумент шаблон #4
Ну вот, собственно, весь код:
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
#include <iostream>
#include <string>
 
 
using namespace std;
 
class author
{
private:
    string surname;
    string name;
    string otch;
public:
    bool operator == (const author& a2)
    { return (surname==a2.surname && name==a2.name &&otch==a2.otch);}
    bool operator < (const author& a2)
    {
        if (surname<a2.surname)
            return true;
        if (surname==a2.surname && name<a2.name)
            return true;
        if (surname==a2.surname && name==a2.name && otch<a2.otch)
            return true;
        return false;
    }
    void SetSurname (const string& s)
    { surname=s;}
    void SetName (const string& s)
    { name=s;}
    void SetOtch (const string& s)
    {otch=s;}
 
    friend ifstream& operator >> (ifstream& in, author& a)
    {
        in>>a.surname;
        in>>a.name;
        in>>a.otch;
        return in;
    }
    friend ostream& operator << (ostream& out, const author& a)
    {
        out<<a.surname<<" "<<a.name<<" "<<a.otch;
        return out;
    }
    friend istream& operator >> (istream& in, author& a)
    {
        cout<<"Введите ФИО автора: ";
        in>>a.surname>>a.name>>a.otch;
        return in;
    }
};
int main()
{
    setlocale (LC_ALL,".1251");
    author a, b;
    cin>>a>>b;
    if (a<b)
        cout<<"+"<<endl;
    return 0;
}
DrOffset
6820 / 4031 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
10.04.2014, 19:32     Не удалось вывести аргумент шаблон #5
Цитата Сообщение от HenryDukart Посмотреть сообщение
Но у меня ругается, что не может. В чем заключается проблема?
Он не на это ругается. У тебя не видно operator>> для ifstream, подключи #include <fstream>
HenryDukart
 Аватар для HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
10.04.2014, 19:40  [ТС]     Не удалось вывести аргумент шаблон #6
DrOffset, ой, это я забыл вырезать перед копированием на форум. В полном проекте подключен fstream
DrOffset
6820 / 4031 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
10.04.2014, 19:46     Не удалось вывести аргумент шаблон #7
Цитата Сообщение от HenryDukart Посмотреть сообщение
В полном проекте подключен fstream
Тогда тут все нормально. Какой компилятор и в какой строке ошибка?
HenryDukart
 Аватар для HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
10.04.2014, 19:55  [ТС]     Не удалось вывести аргумент шаблон #8
DrOffset,
VS 2008. Если в строке
C++
1
if (a<b)
знак меньше заменить на любой другой (кроме равенства), то выдаст в этой строке около 15 ошибок с почти одинаковым содержанием:
error C2784: bool std::operator !=(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *): не удалось вывести аргумент шаблон для "const std::basic_string<_Elem,_Traits,_Alloc> &" из "author"
DrOffset
6820 / 4031 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
10.04.2014, 19:58     Не удалось вывести аргумент шаблон #9
Цитата Сообщение от HenryDukart Посмотреть сообщение
знак меньше заменить на любой другой (кроме равенства), то выдаст в этой строке около 15 ошибок с почти одинаковым содержанием:
error C2784: bool std::operator !=(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *): не удалось вывести аргумент шаблон для "const std::basic_string<_Elem,_Traits,_Alloc> &" из "author"
А. Ну все правильно. Нужно реализовать все операторы, которые планируется использовать. Компилятор ничего сам выводить не должен.
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 647
Завершенные тесты: 1
10.04.2014, 20:11     Не удалось вывести аргумент шаблон #10
Насчет знаков: Знаков меньше/равно (насколько я помню) достаточно для алгоритмов stl, вот там через них при необходимости выражаются остальные операторы сравнения (записываются с использованием < и ==).
Кликните здесь для просмотра всего текста
Но это не стопроцентная информация, так что слепо на веру принимать не нужно)
DrOffset
6820 / 4031 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
10.04.2014, 20:27     Не удалось вывести аргумент шаблон #11
Цитата Сообщение от monolit Посмотреть сообщение
Насчет знаков: Знаков меньше/равно (насколько я помню) достаточно для алгоритмов stl, вот там через них при необходимости выражаются остальные операторы сравнения (записываются с использованием < и ==).
Кое-где такое есть. Но в любом случае это делает не компилятор. Это просто особенность библиотеки.
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 647
Завершенные тесты: 1
10.04.2014, 20:51     Не удалось вывести аргумент шаблон #12
Ну дык я обратного и не утверждаю) Просто поясняю, что он мог понять неправильно. Хотя на вопрос уже ответили, да.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 21:42     Не удалось вывести аргумент шаблон
Еще ссылки по теме:

C++ Чтение из файла в аргумент
C++ Ошибка: Не удалось вывести аргумент шаблон для функции
Не удается составить аргумент шаблон C++
C++ Вывести на экран таблицу значений функций в два столбца: аргумент и функция
C++ Первый аргумент getline

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

Или воспользуйтесь поиском по форуму:
DrOffset
6820 / 4031 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
10.04.2014, 21:42     Не удалось вывести аргумент шаблон #13
Цитата Сообщение от monolit Посмотреть сообщение
Ну дык я обратного и не утверждаю)
Так это я и не для тебя, а для автора, это ведь он считал, что компилятор этим занимается
Yandex
Объявления
10.04.2014, 21:42     Не удалось вывести аргумент шаблон
Ответ Создать тему
Опции темы

Текущее время: 07:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru