Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 07.04.2017
Сообщений: 4
1

Ошибка компилятора С2064 в алгоритме

07.04.2017, 12:10. Просмотров 403. Ответов 7
Метки нет (Все метки)

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
#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
 
int I = 3;
 
bool checkMod(int i)
{
    return (i % I == 0);
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    int n;
    cout << "Введите число - N: ";
    cin >> n;
 
    set<int> mas;
    for (int i; i <= n; i++)
        mas.insert(i);
 
    set<int>::iterator it1, it2;
 
    for (int i = 2; i < mas.size(); i++)
    {
        it1 = find(mas.begin(), mas.end(), i);
        if (it1 == mas.end())
            continue;
        else
            it1++;
 
        while (it1 != mas.end())
        {
            it2 = find_if(it1, mas.end(), checkMod(*it1));
 
            if (it2 != mas.end())
                mas.erase(*it2);
            else
                break;
            it1++;
        }
        I++;
    }
 
    copy(mas.begin(), mas.end(), ostream_iterator<int>(cout, " "));
 
    return 0;
}

Результатом вычисления фрагмента не является функция, принимающая 1 аргументов
Выдает ошибку на алгоритм find_if
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2017, 12:10
Ответы с готовыми решениями:

Почему появляется ошибка С2064 (очень давно не писала на С++)
Почему тут появляется эта ошибка? Заранее спасибо :yes: void FileSorter::sortString(bool...

Ошибка компилятора fatal error C1091: ограничение компилятора: длина строки превышает 65535 байт
Компилируя программу вот такой командой: cl /O2 /Oi /GL /EHsc /MD /Gy main.cpp И компилятор...

Ошибка в алгоритме
Public Sub primer() x = 0.225 Dim p(1 To 20) For i = 1 To 20 p(i) = x * Exp(i) * Sin(x / i)...

Ошибка в алгоритме
import java.util.Scanner; public class twenty_seven { public static void main(String args) {...

7
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
07.04.2017, 12:33 2
C++
1
it2 = find_if(it1, mas.end(), checkMod);
и заодно
C++
1
2
for (int i = 0; i <= n; i++)
    mas.insert(i);
0
842 / 773 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
07.04.2017, 12:34 3
Цитата Сообщение от With_drollery Посмотреть сообщение
C++
1
it2 = find_if(it1, mas.end(), checkMod(*it1));
Третьим параметром find_if идёт указатель на функцию, а у вас её вызов.
Правильно так:
C++
1
it2 = find_if(it1, mas.end(), checkMod);
Алгоритм сам разыменует итератор и передаст значение в функцию.
0
0 / 0 / 0
Регистрация: 07.04.2017
Сообщений: 4
07.04.2017, 12:53  [ТС] 4
Цитата Сообщение от MrGluck Посмотреть сообщение
C++
1
it2 = find_if(it1, mas.end(), checkMod);
и заодно
C++
1
2
for (int i = 0; i <= n; i++)
    mas.insert(i);
Только вот простые числа начинаются с двойки, а не с 0)
В моей проге ты бы тогда делил все числа на 0 и на 1

Но спасибо за исправление в алгоритме!
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
07.04.2017, 13:00 5
Цитата Сообщение от With_drollery Посмотреть сообщение
Только вот простые числа начинаются с двойки, а не с 0)
В моей проге ты бы тогда делил все числа на 0 и на 1
я не вникал с смысл кода (а задание вы так и не сообщили), указал на использование неинициализированной переменной i в цикле.
1
0 / 0 / 0
Регистрация: 07.04.2017
Сообщений: 4
07.04.2017, 13:25  [ТС] 6
осталась только ошибка одна
0
Миниатюры
Ошибка компилятора С2064 в алгоритме  
0 / 0 / 0
Регистрация: 07.04.2017
Сообщений: 4
07.04.2017, 13:34  [ТС] 7
Исправил сам, случайно выходил за пределы
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
07.04.2017, 13:38 8
После erase итераторы, указывающие на удаляемый объект, превращаются в тыкву. Проверьте что этого не происходит у вас в коде.
Iterators, pointers and references referring to elements removed by the function (erase) are invalidated.
Пройдитесь в дебагере по шагам и посмотрите на чём у вас всё падает. Ну и алгоритм вы выбрали достаточно странный.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2017, 13:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибка в алгоритме
Есть такое задание: Напишите алгоритм, который для одномерного массива с четным количеством...

Ошибка в алгоритме
Помогите найти ошибку в алгоритме. Алгоритм должен сортировать строки. void...

ошибка в алгоритме
Вроде бы правильно, но что-то не так, не пойму что. В массиве А(300) найти суммы нечетных...

Ошибка в алгоритме
В метании молота состязается n спортcменов. Каждый из них сделал m бросков. Побеждает спортсмен, у...

Ошибка в алгоритме
В общем есть две меняющиеся величины одна постоянно растущая - аа, а другая - с имеет два значения...

Ошибка в алгоритме
Неправильно работает программа есть сетка (координаты x - в векторе A y - в векторе B) надо из...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.