Поиск:

Ответ в темуСоздание новой темы Создание опроса
> error C2679 и error C2678 помогите исправить 
:(
    Опции темы
lavs
  Дата 10.2.2015, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите исправить ошибку при компиляции ругается на строки

Код

showIter = NULL;


и 
Код

if (showIter == NULL)

showIter - это переменная, объявленная так:
Код

list<CCompareFing>::iterator showIter;

CCompareFing это структура:
Код

struct CCompareFing
{
    double val;        
    short cDot;        
    short nfng;        
    CString name;    
    list<CPairAbsDot> dots;        
    //second - совпавшие точки
    list<CPairSur> surdots;
};

Вылазят ошибки типа:
Ошибка    1    error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа "int" (или приемлемое преобразование отсутствует)    c:\users\толик\desktop\figneranalyser\fingeranalyserdlg.cpp    252    1    FingerAnalyser
Ошибка    2    error C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "std::_List_iterator<std::_List_val<std::_List_simple_types<CCompareFing>>>" (или приемлемое преобразование отсутствует)    c:\users\толик\desktop\figneranalyser\fingeranalyserdlg.cpp    440    1    FingerAnalyser
    3    IntelliSense: отсутствует оператор "=", соответствующий этим операндам
            типы операндов: std::_List_iterator<std::_List_val<std::_List_simple_types<CCompareFing>>> = int    c:\Users\Толик\Desktop\FignerAnalyser\FingerAnalyserDlg.cpp    252    12    FingerAnalyser
    4    IntelliSense: отсутствует оператор "==", соответствующий этим операндам
            типы операндов: std::_List_iterator<std::_List_val<std::_List_simple_types<CCompareFing>>> == int    c:\Users\Толик\Desktop\FignerAnalyser\FingerAnalyserDlg.cpp    440    15    FingerAnalyser


Это сообщение отредактировал(а) lavs - 10.2.2015, 10:21
PM MAIL   Вверх
baldina
Дата 10.2.2015, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



NULL (int) не преобразуется к типу list<TCompareFing>::iterator. 
используйте std::list<TCompareFing>::end()


Это сообщение отредактировал(а) baldina - 10.2.2015, 01:59
PM MAIL   Вверх
lavs
Дата 10.2.2015, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(baldina @  10.2.2015,  01:58 Найти цитируемый пост)
используйте std::list<TCompareFing>::end()

Это будет то же самое что и NULL?

Добавлено через 13 минут и 43 секунды
Ошибку выбивает тоже( Можно я вам скину проект вы мне поможете?
PM MAIL   Вверх
baldina
Дата 10.2.2015, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



Цитата(lavs @  10.2.2015,  08:22 Найти цитируемый пост)
Это будет то же самое что и NULL?

нет, конечно, иначе бы не было ошибки

Добавлено через 7 минут и 59 секунд
весь проект не надо, вы покажите предметную часть. например, здесь
при использовании stl не требуется вручную инициализировать итераторы и проверять их на конкретные значения: итератор суть обобщение указателя, абстрактная координатная структура. абсолютные координаты обычно не важны (например, адрес переменной произволен), важны относительные (например смещение от начала), попадание в диапазон и т.д.
PM MAIL   Вверх
lavs
Дата 10.2.2015, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот. Файл .cpp
На строку 252 и 440 ошибка компилятора
тут файл где объявлен итератор
Здесь файл со структурой CCompareFing
PM MAIL   Вверх
baldina
Дата 11.2.2015, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



lavs, зачем так много не относящегося к делу текста? зачем это постить в ideone в виде непригодном для компиляции? online ide хороши для небольших модельных примеров (законченных!)

тем не менее я бегло поглядел ваш код. видимо речь идет об этом:
Код

void CFingerAnalyserDlg::ShowBase(bool key, bool next)
{
   ... 
   if (showIter == NULL)
     showIter = compareResult->begin();
  ...

  showIter++;
  if(showIter == compareResult->end())
     showIter = compareResult->begin();
  ...
}


насколько я вижу, ShowBase() переходит по данным вперед/назад, а по достижении конца(начала) должна переходить в начало(конец). Вы почти правильно все делаете,
только не надо showIter присваивать 0 и сравнивать с ним. Если у вас нет compareResult, 
то значение showIter не имеет смысла, и поэтому не важно. Все операции над showIter 
должны производиться только если compareResult не 0. Насколько я вижу, это проверяется.
И еще надо проинициализировать showIter как только появляется compareResult:
Код

compareResult = CompareWithBase();
showIter = compareResult->begin();


в целом будет что-то вроде этого

ЗЫ. Удобнее было бы иметь две функции - ShowPrev и ShowNext
и вообще, одна функция - одна задача. типа
Код

iterator CFingerAnalyserDlg::Prev(iterator i) {
  if (i == compareResult->begin())
     i = compareResult->end();
  return --i;
}
iterator CFingerAnalyserDlg::Next (iterator i) {
  if (++i == compareResult->end())
     i = compareResult->begin();
  return i;
}
void CFingerAnalyserDlg::ShowPrev() {
  if (compareResult && compareResult->size() != 0) {
    showIter = Prev (showIter); // get next or first position if end
    ShowPicture (showIter);
    UpdateData(false);
  }
}
void CFingerAnalyserDlg::ShowNext() {...}

PM MAIL   Вверх
lavs
Дата 11.2.2015, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за ответ))
PM MAIL   Вверх
lavs
Дата 11.2.2015, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



теперь еще одна проблемка при нажатии на кнопку открыть и выбора битмап появляется ошибка (скрин приложил)
код кнопки
Код

// Открытие файла
void CFingerAnalyserDlg::OnBnClickedOpen()
{
    char szFilters[]= "Образы (*.bmp)|*.bmp|All Files (*.*)|*.*||";
    CFileDialog dlg(TRUE, "bmp", "*.bmp", OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);

    if(dlg.DoModal() != IDOK) 
        return;        //никаких файлов не открыли

    if(dlg.GetFileExt().CompareNoCase("bmp")) 
        return;    //открытый файл не имеет расширеня .bmp

    CString fileName = dlg.GetFileName();
    
    if(picture != NULL)
        delete(picture);

    picture = new CAnalysePicture(fileName, this->GetDC());
    m_WorkFile = fileName;

    if(compareResult)
    {
        for(list<CCompareFing>::iterator i = compareResult->begin(); i != compareResult->end(); i++)
        {    
            list<CPairSur>::iterator j;
            for(j=i->surdots.begin(); j!=i->surdots.end(); j++)
            {
                j->first->clear(); 
                delete(j->first);
                j->second->clear(); 
                delete(j->second);
            }    
        }
    
        compareResult->clear();
    }
    
    m_ShowBase = false;
    Invalidate();
}

вылетает при выполнении команды 
Код

picture = new CAnalysePicture(fileName, this->GetDC());


Это сообщение отредактировал(а) lavs - 11.2.2015, 15:29

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Снимок.PNG 13,65 Kb
PM MAIL   Вверх
baldina
Дата 11.2.2015, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



смотрите в отладчике, что именно в конструкторе CAnalysePicture приводит к ассерту.

кстати,
Цитата(lavs @  11.2.2015,  14:55 Найти цитируемый пост)
if(picture != NULL)
        delete(picture);

if здесь лишний. delete (void*)0 вполне законная операция
PM MAIL   Вверх
lavs
Дата 11.2.2015, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



baldina, благодарю, исправил)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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