class MojaKlasa
{
std::vector< int > moje;
public:
typedef std::vector< int >::iterator iterator;
iterator begin()
{
moje.begin();
}
iterator end()
{
moje.end();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
MojaKlasa roznica;
MojaKlasa rezultat;
MojaKlasa drugiRezultat;
std::set_difference( rezultat.begin(), rezultat.end(),
drugiRezultat.begin(), drugiRezultat.end(),
std::inserter( roznica, roznica.begin() ) );
return 0;
}
Jak to jest, że dodałem tego typedef'a i rzuca już całkowicie innymi błędami? Przecież poprzednio było tak samo... typedef jest jak using... zwykły alias. Mogę prosić o wytłumaczenie jak to kompilator zinterpretował? Nigdy jeszcze nie opakowywałem kontenera, dlatego może trywialne pytania, ale dla mnie dość ciężkie... Teraz mam błędy:
Error 1 error C2039: 'const_reference' : is not a member of 'MojaKlasa' c:\program files (x86)\microsoft visual studio 10.0\vc\include\iterator
Error 2 error C2146: syntax error : missing ';' before identifier 'const_reference' c:\program files (x86)\microsoft visual studio 10.0\vc\include\iterator
Error 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\microsoft visual studio 10.0\vc\include\iterator
Error 4 error C2602: 'std::insert_iterator<_Container>::const_reference' is not a member of a base class of 'std::insert_iterator<_Container>' c:\program files (x86)\microsoft visual studio 10.0\vc\include\iterator
Error 5 error C2868: 'std::insert_iterator<_Container>::const_reference' : illegal syntax for using-declaration; expected qualified-name c:\program files (x86)\microsoft visual studio 10.0\vc\include\iterator
Error 6 error C2039: 'value_type' : is not a member of 'MojaKlasa' c:\program files (x86)\microsoft visual studio 10.0\vc\include\iterator
Error 7 error C2182: '_Val' : illegal use of type 'void' c:\program files (x86)\microsoft visual studio 10.0\vc\include\iterator
Error 8 error C2182: '_Val' : illegal use of type 'void' c:\program files (x86)\microsoft visual studio 10.0\vc\include\iterator
EDIT
OK już coraz bliżej:
#include <vector>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
class MojaKlasa
{
std::vector< int > moje;
public:
typedef std::vector< int >::iterator iterator;
typedef std::vector< int >::const_reference const_reference;
typedef std::vector< int >::value_type value_type;
iterator begin()
{
moje.begin();
}
iterator end()
{
moje.end();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
MojaKlasa roznica;
MojaKlasa rezultat;
MojaKlasa drugiRezultat;
std::set_difference( rezultat.begin(), rezultat.end(),
drugiRezultat.begin(), drugiRezultat.end(),
std::inserter( roznica, roznica.begin() ) );
return 0;
}
Error 1 error C2039: 'insert' : is not a member of 'MojaKlasa' c:\program files (x86)\microsoft visual studio 10.0\vc\include\iterator
Teraz tylko jak zrobić tego insert'a... Jeszcze raz proszę o wytłumaczenie mi skąd kompilator wie, że te wszystkie typedef'y tyczą się tych rzeczy... W C# implementuje się IEnumerable i jest z górki, a tutaj nic nie jest implementowane, a kompilator wie, że ta klasa ma się tak zachowywać...