У меня есть контейнер, типом которого есть мой клас A, контейнер, к примеру, set< class A>.
Я создаю итератор set::iterator iter = set< class A >.begin()
Как мне вызвать метод через итератор?
*iter->myMethod() не работает, почему?
#include <iostream>
#include<set>
using namespace std;
class A
{
private:
int c, b;
public:
a( int a1, int b1): c(a1), b(b1){}
void out() const
{
cout << "\na=" << c << ", b = " << b << endl;
}
friend ostream& operator<<(ostream &cout, const A &arg);
};
ostream& operator<<(ostream &cout, const A &arg) {
cout << "\na=" << arg.c << ", b = " << arg.b << endl;
return cout;
}
int main()
{
set<A> seta;
seta.insert(A(1, 2));
seta.insert(A(1, 7));
seta.insert(A(1, 8));
seta.insert(A(2, 2));
seta.insert(A(14, 2));
set<A>::iterator iter = seta.begin();
for (; iter != seta.end(); ++iter)
cout << (A)*iter;// выкидывает в файл xstddef с кодом ошибки с2678
*iter->out(); // здесь итератор типа 'A const'
// и он не совместимый с методом A::out()
system("pause");
return 0;
}
Вы можете рассматривать итератор как указатель и работать с ним как с указателем. Методы через указатель можно вызывать двумя способами. "Напрямую" с использованием оператора ->
iter->myMethod()
и разыменовывая указатель (через *) и используя оператор точка
(*iter).myMethod()
В вашем коде (если я правильно понял)
*iter->myMethod()
явно происходит попытка использования обоих этих методов
Вот такой код - https://ideone.com/TDOWUT
#include <vector>
#include <iostream>
#include <iomanip>
using namespace std;
class Test
{
public:
Test(int i):i(i){}
void out() const { cout << "Test for " << i << endl; }
private:
int i;
};
int main(int argc, const char * argv[])
{
vector<Test> s;
for(int i = 0; i < 10; ++i)
s.push_back(Test(rand()%100));
for(auto it = s.begin(); it != s.end(); ++it)
it->out();
}
Как видите, все работает.
Как вообще вы представляете компиляцию вашего
set::iterator iter = set.begin();
мне непонятно. С одной стороны у вас set
- тип, с другой - имя объекта?...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть товары на странице,у каждого товара есть кнопка "В корзину"Вот код этих кнопок:
Можно ли при компиляции в SASS убрать вложенность? Или писать код без вложенности? На данный момент это выглядит вот так: