 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Frans Fürst Guest
|
Posted: Thu Feb 02, 2006 6:04 pm Post subject: std::vector ersetzen durch std::deque |
|
|
Hallo!
ich bin gerade dabei, in folgender Klasse die std::vector-Zeile durch ein
std::deque zu ersetzen, da die hier wohl besser passt:
class CSignal{
public:
[...]
protected:
/// Signalquellenbeschreibung
std::vector< CSignal > input;
[...]
};
mit dem gcc funktioniert das auch einwanfrei, mit VisualStudio 2003 bekomme
ich beim compilieren folgenden Fehler:
c:/Programme/MSVS.NET.2003/Vc7/include/deque(59) : error C2027: use of
undefined type 'CSignal'
c:/3D_SKETCHER/_LIBS/inputinterface/include/signal.h(37) : see
declaration of 'CSignal'
c:/3D_SKETCHER/_LIBS/inputinterface/include/signal.h(123) : see
reference to class template instantiation 'std::deque<_Ty>' being compiled
with
[
_Ty=CSignal
]
Kann mir da jemand sagen, was ich da falsch gemacht haben könnte, und wie
ich das wegbekomme?
Vielen Dank,
Frans
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Thu Feb 02, 2006 8:02 pm Post subject: Re: std::vector ersetzen durch std::deque |
|
|
"Frans Fürst" <sendspamhere01 (AT) arcor (DOT) de> writes:
| Quote: | ich bin gerade dabei, in folgender Klasse die std::vector-Zeile
durch ein std::deque zu ersetzen, da die hier wohl besser passt:
class CSignal{
public:
[...]
protected:
/// Signalquellenbeschreibung
std::vector< CSignal > input;
[...]
};
|
Dieser Code hat sowohl mit std::vector als auch mit std::deque
undefiniertes Verhalten. Templates aus Standardbibliothek dürfen nicht
mit inkompletten Typen instantiiert werden.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Stefan Reuther Guest
|
Posted: Thu Feb 02, 2006 8:02 pm Post subject: Re: std::vector ersetzen durch std::deque |
|
|
Frans Fürst wrote:
[Schere benützt]
| Quote: | ich bin gerade dabei, in folgender Klasse die std::vector-Zeile durch ein
std::deque zu ersetzen, da die hier wohl besser passt:
class CSignal{
/// Signalquellenbeschreibung
std::vector< CSignal > input;
mit dem gcc funktioniert das auch einwanfrei, mit VisualStudio 2003 bekomme
ich beim compilieren folgenden Fehler:
|
Die std::deque<T> von VS2003 wird wohl (Platz für) ein Objekt vom Typ T
reservieren wollen. Damit hat du indirekt die Situation, dass CSignal
ein Objekt vom Typ CSignal enthalten soll, was ja bekanntermaßen nicht
geht. Ob der das darf, finde ich jetzt auf die Schnelle nicht raus.
Als Workaround ist halt dynamischer Speicher angebracht. Entweder
std::deque<CSignal*>
oder
std::deque<CSignal>*
nebst entsprechender Behandlung.
Stefan
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Thu Feb 02, 2006 11:01 pm Post subject: Re: std::vector ersetzen durch std::deque |
|
|
Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:
| Quote: | Dieser Code hat sowohl mit std::vector als auch mit std::deque
undefiniertes Verhalten. Templates aus Standardbibliothek dürfen nicht
mit inkompletten Typen instantiiert werden.
Der Meinung bin ich ja auch, aber wo steht das?
|
ISO C++ Standard, §17.4.3.6
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Stefan Reuther Guest
|
Posted: Thu Feb 02, 2006 11:01 pm Post subject: Re: std::vector ersetzen durch std::deque |
|
|
Thomas Maeder wrote:
| Quote: | Dieser Code hat sowohl mit std::vector als auch mit std::deque
undefiniertes Verhalten. Templates aus Standardbibliothek dürfen nicht
mit inkompletten Typen instantiiert werden.
|
Der Meinung bin ich ja auch, aber wo steht das?
Klar, der Typ muss CopyConstructible sein. Aber muss er das zum
Zeitpunkt der Instanziierung der Klasse std::vector<T> zwecks
Größenbestimmung, oder zum Zeitpunkt der Instanziierung der verwendeten
Members?
Stefan
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|