Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> STL - список 
V
    Опции темы
AlexanderV
Дата 9.5.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.8.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



В общеми, есть код вроде этого:


Код


...

struct s1
{

    struct s2
    {
        int n;
        friend bool operator > (s2 op1,s2 op2){
            return op1.n>op2.n;
        }

        void v2()
        {
        list<s2> s;

        s.sort(greater<s2>());
        }
    };

    int n;    
    friend bool operator > (s1 op1,s1 op2){
        return op1.n>op2.n;
    }


    void v1()
    {
        list<s1> s;

        s.sort(greater<s1>());
    }


};


Две аналогичные структуры s1 и s2, s2 вложена в s1.
В похожих функциях v1 и v2 создается  STL-список с типом s1 и s2 соответственно, а потом сортируеться через алгоритм sort. Используеться функтор greater, причем оператор сравнения > перегружен в обоих случаях.

Проблема в том, что v2 не компилируеться, выдавая абсолютно бредовую оишбку 11 раз:

Как исправить ситуацию?

///////////////////////////////////
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2784: 'bool __cdecl std::operator >(const class std::basic_string<_E,_Tr,_A> &,const _E *)' : could not deduce template argument for 'const class std::basic_string<_E,_Tr,_A> &' from 
'const struct s1::s2'
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2784: 'bool __cdecl std::operator >(const _E *,const class std::basic_string<_E,_Tr,_A> &)' : could not deduce template argument for 'const  *' from 'const struct s1::s2'
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2784: 'bool __cdecl std::operator >(const class std::basic_string<_E,_Tr,_A> &,const class std::basic_string<_E,_Tr,_A> &)' : could not deduce template argument for 'const class std::
basic_string<_E,_Tr,_A> &' from 'const struct s1::s2'
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2784: 'bool __cdecl std::operator >(const class std::multimap<_K,_Ty,_Pr,_A> &,const class std::multimap<_K,_Ty,_Pr,_A> &)' : could not deduce template argument for 'const class std::
multimap<_K,_Ty,_Pr,_A> &' from 'const struct s1::s2'
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2784: 'bool __cdecl std::operator >(const class std::map<_K,_Ty,_Pr,_A> &,const class std::map<_K,_Ty,_Pr,_A> &)' : could not deduce template argument for 'const class std::map<_K,_Ty
,_Pr,_A> &' from 'const struct s1::s2'
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2784: 'bool __cdecl std::operator >(const class std::_Tree<_K,_Ty,_Kfn,_Pr,_A> &,const class std::_Tree<_K,_Ty,_Kfn,_Pr,_A> &)' : could not deduce template argument for 'const class s
td::_Tree<_K,_Ty,_Kfn,_Pr,_A> &' from 'const struct s1::s2'
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2784: 'bool __cdecl std::operator >(const class std::vector<_Ty,_A> &,const class std::vector<_Ty,_A> &)' : could not deduce template argument for 'const class std::vector<_Ty,_A> &' 
from 'const struct s1::s2'
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2784: 'bool __cdecl std::operator >(const class std::list<_Ty,_A> &,const class std::list<_Ty,_A> &)' : could not deduce template argument for 'const class std::list<_Ty,_A> &' from '
const struct s1::s2'
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2784: 'bool __cdecl std::operator >(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce template argum
ent for 'const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' from 'const struct s1::s2'
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2784: 'bool __cdecl std::operator >(const struct std::pair<_T1,_T2> &,const struct std::pair<_T1,_T2> &)' : could not deduce template argument for 'const struct std::pair<_T1,_T2> &' 
from 'const struct s1::s2'
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
c:\microsoftprograms\studio6\vc98\include\functional(80) : error C2676: binary '>' : 'const struct s1::s2' does not define this operator or a conversion to a type acceptable to the predefined operator
        c:\microsoftprograms\studio6\vc98\include\functional(80) : while compiling class-template member function 'bool __thiscall std::greater<struct s1::s2>::operator ()(const struct s1::s2 &,const struct s1::s2 &) const'
////////////////////////////////////////////////////
 
PM MAIL   Вверх
MAKCim
Дата 9.5.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



у g++ 4.0.2 все OK
(copy-paste как здесь) 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
AlexanderV
Дата 9.5.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.8.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



У меня MSVC++ 6.0 
PM MAIL   Вверх
likehood
Дата 9.5.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Цитата(AlexanderV @  9.5.2006,  17:19 Найти цитируемый пост)
У меня MSVC++ 6.0

У меня тоже  smile 
Твой код компилится без проблем. 
PM MAIL   Вверх
AlexanderV
Дата 9.5.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.8.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



А какие у тебя библиотеки подключены?
(Если можно, лучше выложи кодом всю верхнюю часть файла smile )
Какой тип приложения выставлен? 
PM MAIL   Вверх
likehood
Дата 9.5.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Тип приложения: Win32 Console.
Вот заголовок:
Код

#include <list>
using namespace std;

 
PM MAIL   Вверх
AlexanderV
Дата 9.5.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.8.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



Все равно у меня эта пакость не работает  smile 

Выложи, пожалуйста, на форум полностью свой компилирующийся проект с этими двумя структурами, буду смотреть, где я уже у себя в настройках что подхимичил...  
PM MAIL   Вверх
likehood
Дата 9.5.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Попробуй просто создать новый проект и забей туда только этот код, ничего лишнего. Если не поможет, значит что-то с студией у тебя не так. 
PM MAIL   Вверх
MAKCim
Дата 9.5.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Код

#include <list>
using namespace std;


а не
Код

#include <list>
#include <functional>
using namespace std;

случайно? 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
AlexanderV
Дата 9.5.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.8.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



Цитата

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


Да это я уже пробовал, не помогает... 
Выложи все-таки свой проjект, толку больше будет... 
PM MAIL   Вверх
likehood
Дата 10.5.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Высылаю файл проекта. Раньше не мог, потому что на работе у меня не стоит VC6, домой пришел только что.

Кстати, MAKCim, строчка #include <functional> необязательна, т.к. она уже есть в файле list. 

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  debug.dsp 3,31 Kb
PM MAIL   Вверх
Earnest
Дата 10.5.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Возможно, в результате какого-то другого кода (или подключенных файлов) компилятор в упор не видит операторы >. Судя по первой ошибке, он, бедняга, пытается использовать оператор для сравнения строк.
Попробуй заменить внешние дружественные операторы > на константные операторы-члены >. По-моему, должно скомпилироваться.
 


--------------------
...
PM   Вверх
AlexanderV
Дата 11.5.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.8.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



Переустановил Visual Studio, все проблемы как рукой сняло smile 
Всем спасибо. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1264 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.