PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : vector<complex<double>>?


noid
2004-12-07, 14:18:06
std::vector<std::complex<double>>* result = new std::vector<std::complex<double>> (input->size());

ist ein schachteln von templates nicht erlaubt? :confused:
oder hab nur nen denk-/tippfehler?

fehlermeldung bei ms vc++ 6:

C:\********\***\******.cpp(55) : error C2146: Syntaxfehler : Fehlendes ',' vor Bezeichner 'result'

Chris Lux
2004-12-07, 14:28:28
std::vector<std::complex<double>>* result = new std::vector<std::complex<double>> (input->size());


versuch mal zwischen den beiden schliessenden > klammern ein leerzeichen zu machen.

so:
std::vector<std::complex<double> >* result =
new std::vector<std::complex<double> > (input->size());

Asmodeus
2004-12-07, 14:29:05
Ist vielleicht nicht sehr elegant, aber wenn du Dir mit typedef einen Typ von std::complex<double> anlegst und diesen Typ in den Vektor packst, dann sollte es gehen, meiner Meinung nach.

Gruss, Carsten.

noid
2004-12-07, 14:30:44
thnx, dachte nicht, dass das so problematisch ist.
ist das ansi-technisch pflicht?

Asmodeus
2004-12-07, 14:31:22
versuch mal zwischen den beiden schliessenden > klammern ein leerzeichen zu machen.

so:
std::vector<std::complex<double> >* result =
new std::vector<std::complex<double> > (input->size());

Stimmt, in VC7 bringt er auch eine passende Fehlermeldung (error C2947: '>' wird erwartet, um template-argument-list abzubrechen. '>>' wurde gefunden.
), wenn man es nicht so macht. In VC6 ist die Fehlermeldung hingegen nicht so eindeutig.

Gruss, Carsten.

Chris Lux
2004-12-07, 14:32:08
thnx, dachte nicht, dass das so problematisch ist.
ist das ansi-technisch pflicht?

ist glaube so, weil >> als shift operator geparst wird.

noid
2004-12-07, 14:43:33
der präprozessor des 6ers kann halt nix *seufz*
zB ignoriert er ständig forward declartions und jammert er kennt die klassennamen nicht.
den 7er kann ich hier leider nicht benutzen (gibts hier leider nicht ;))

Gast
2004-12-07, 16:51:11
ist glaube so, weil >> als shift operator geparst wird.

Das hat man davon wenn man die Gramatik bis auf's letzte ausquetscht.

>> shift
>> streamio op
Func<Type<A,B> > geschachtelte templates

Xmas
2004-12-09, 13:08:42
>> shift
>> streamio op
Das ist ja auch lediglich Operator Overloading, und keine Zweideutigkeit der Grammatik. Ist mir auf jeden Fall lieber, als bei eigenen Klassen immer add()-Methoden oder ähnliches benutzen zu müssen.
A * B sieht halt eleganter aus als A.mul(B).

Trap
2004-12-09, 13:18:20
Es gibt auch Sprachen in denen man komplett neue Infixops definieren kann.
Clean zum Beispiel.

Chris Lux
2004-12-09, 13:45:40
Es gibt auch Sprachen in denen man komplett neue Infixops definieren kann.
Clean zum Beispiel.
Bjarne Stroustrup (http://www.research.att.com/%7Ebs/whitespace98.pdf) hat da schon lange vorschläge für C++ gemacht, doch bisher hat man da nix gehört. leider.

HellHorse
2004-12-09, 16:43:20
Es gibt auch Sprachen in denen man komplett neue Infixops definieren kann.
Clean zum Beispiel.
Und es gibt Sprachen, wo das der normale Weg ist um Nachrichten zu verschicken und alles, inkl. if, else, while, ... auf diese Weise implementiert ist.