Problem mit Vektoren als Objektcontainern

Orthak

Mitglied
Hallo,
ich starte meine Karriere in diesem Forum gleich mal mit einer Frage :p. Es geht um STL-Vektoren als Objektcontainer. Undzwar habe ich zwei Klassen entworfen in der eine einen Vektor für Objekte der anderen enthält und diese über eine Methode hinzufügen kann:

Klasse 1: QuestionCatalog
Klasse 2: QuestionManager

QuestionManager (Vector im Header, Funktionsdeklaration in cpp Datei):
Code:
vector<QuestionCatalog> qCatalogs;
void QuestionManager::addCatalog(QuestionCatalog catalog) {
	qCatalogs.push_back(catalog);
}

Nun gibt mir GCC folgende Fehler aus:
Code:
**** Build of configuration Debug for project TEST ****

**** Internal Builder is used for build               ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -oQuestionManager.o ..\QuestionManager.cpp
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_construct.h: In copy constructor `std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)':
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_construct.h:81:   instantiated from `void std::_Construct(_T1*, const _T2&) [with _T1 = QuestionCatalog, _T2 = QuestionCatalog]'
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_vector.h:560:   instantiated from `void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = QuestionCatalog, _Alloc = std::allocator<QuestionCatalog>]'
..\QuestionManager.cpp:44:   instantiated from here
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_base.h:781: error: `std::ios_base::ios_base(const std::ios_base&)' is private
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_construct.h:81: error: within this context
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_construct.h: In copy constructor `std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)':
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_construct.h:81:   instantiated from `void std::_Construct(_T1*, const _T2&) [with _T1 = QuestionCatalog, _T2 = QuestionCatalog]'
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_vector.h:560:   instantiated from `void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = QuestionCatalog, _Alloc = std::allocator<QuestionCatalog>]'
..\QuestionManager.cpp:44:   instantiated from here
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/streambuf:769: error: `std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]' is private
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_construct.h:81: error: within this context
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/vector.tcc: In member function `std::basic_ios<char, std::char_traits<char> >& std::basic_ios<char, std::char_traits<char> >::operator=(const std::basic_ios<char, std::char_traits<char> >&)':
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/vector.tcc:238:   instantiated from `void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = QuestionCatalog, _Alloc = std::allocator<QuestionCatalog>]'
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_vector.h:564:   instantiated from `void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = QuestionCatalog, _Alloc = std::allocator<QuestionCatalog>]'
..\QuestionManager.cpp:44:   instantiated from here
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_base.h:784: error: `std::ios_base& std::ios_base::operator=(const std::ios_base&)' is private
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/vector.tcc:238: error: within this context
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/vector.tcc: In member function `std::basic_filebuf<char, std::char_traits<char> >& std::basic_filebuf<char, std::char_traits<char> >::operator=(const std::basic_filebuf<char, std::char_traits<char> >&)':
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/streambuf:776: error: `std::basic_streambuf<_CharT, _Traits>& std::basic_streambuf<_CharT, _Traits>::operator=(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]' is private
D:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/vector.tcc:238: error: within this context
Build error occurred, build is stopped
Time consumed: 469  ms.

Ich habe selbiges im Kleinen mit zwei Dummy-Objekten versucht und es hat alles wunderbar funktioniert. Die Suchfunktion hat leider nichts ergeben.

Bin über jeden Hinweis dankbar!
 
Hi.

Anscheinend hast du in deiner Klasse einen Stream als Membervariable drin. Das ist nicht möglich, da man Streams nicht kopieren kann.

Deshalb schlägt die Instantiierung des std::vector fehl, da Objekte in einem STL Kontainer kopierbar sein müssen.

Gruß

PS: Zeig am besten deine Klassendeklarationen.
 
Zurück