C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: Vector als Übergabeparameter
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Thomas Maeder
Guest





PostPosted: Sat Jul 19, 2003 9:20 pm    Post subject: Re: Vector als Übergabeparameter Reply with quote



"chris picard" <chrispi (AT) hotpop (DOT) com> writes:

Quote:
Hi, wie kann ich einen Vector als Übergabeparameter definieren?

int minor(vector<int> a, vector<int> b)

funktioniert nicht.

Was heisst "funktioniert nicht"? Bitte beschreibe genau, was vor sich geht:
- wenn Compiler- oder Linkerfehler, dann kopiere die Compilermeldung in Deine
Meldung
- wenn das Programm sich anders verhält als erwartet, beschreibe bitte, was
Du erwartest und was stattdessen passiert

In beiden Fällen braucht's zudem ein *minimales* Programm, das es der
Leserschaft erlaubt, nachzuvollziehen, was bei Dir passiert.

--
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
Markus Breuer
Guest





PostPosted: Sat Jul 19, 2003 9:46 pm    Post subject: Re: Vector als Übergabeparameter Reply with quote



Quote:
Hi, wie kann ich einen Vector als Übergabeparameter definieren?

int minor(vector<int> a, vector<int> b)

funktioniert nicht.

Was funktioniert denn nicht?

Im Übrigen ist es von Vorteil, wenn du bei template-Instazierungen von
typedef's Gebrauch machst. Das macht die Sache übersichtlicher:

// Ein Name bringt schon die Übersicht ins Spiel
typedef std::vector<int> ApfelKiste;

int minor( ApfelKiste a, ApfelKiste b );

Diese übergabe ist by-value, d.h. beide ApfelKist-en werden beim
Funktionsaufruf kopiert. Du kannst sie auslesen, ändern oder
beschreiben. Änderungen wirken sich aber nur auf die Kopien aus, deine
Originale bleiben wie sie sind.

int minor( ApfelKiste& a, const ApfelKiste& b );

Übergabe als Referenz. Es werden keine Kopien erzeugt, du arbeitest mit
beiden ApfelKiste-n. Die erste darfst du verändern, die zweite bleibt
read-only.

Markus


--
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
chris picard
Guest





PostPosted: Sat Jul 19, 2003 10:22 pm    Post subject: Re: Vector als Übergabeparameter Reply with quote



Also , der Compiler gibt folgende Fehlermeldung aus
/bezieht sich auf die Zeile der Funktionsdeklaration):
" `vector' was not declared in this scope "

Wenn ich std::vector (anstatt nur vector) verwende
erhalte ich:
" `::vector' undeclared (first use here)"


Hoffe dies hilft weiter, chris

--
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
Christoph Happich
Guest





PostPosted: Sun Jul 20, 2003 7:56 am    Post subject: Re: Vector als Übergabeparameter Reply with quote

chris picard wrote:
Quote:
// Ein Name bringt schon die Übersicht ins Spiel
typedef std::vector<int> ApfelKiste;

Bei mir hakts an dieser Stelle schon , der Compiler
erzeugt folgende Fehlermeldung
[obige Zeile] Syntax error before ';'

Hast du ein #include <vector> ?
Und könntest du endlich mal das /ganze/ Programm posten, damit wir hier
nicht die ganze Zeit rumraten müssen?

Gruss, Christoph

--
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
Markus Breuer
Guest





PostPosted: Sun Jul 20, 2003 8:32 am    Post subject: Re: Vector als Übergabeparameter Reply with quote

Quote:
// Ein Name bringt schon die Übersicht ins Spiel
typedef std::vector<int> ApfelKiste;



Bei mir hakts an dieser Stelle schon , der Compiler
erzeugt folgende Fehlermeldung
[obige Zeile] Syntax error before ';'

Hast du vorab <vector> includiert? Wie lautet die Fehlermeldung?
Kannst du mal den kompletten Code posten, das macht die Analyse
einfacher. Grundsätzlich sollte diese Zeile kompilierbar sein ...

Markus

--
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
Marco Budde
Guest





PostPosted: Sun Jul 20, 2003 9:02 am    Post subject: Re: Vector als Übergabeparameter Reply with quote

chris picard wrote:

Quote:
Wenn ich std::vector (anstatt nur vector) verwende
erhalte ich:
" `::vector' undeclared (first use here)"

Header File eingebunden? Namespace mit using aktiviert?

cu, Marco

--
S: Minolta: Winkelsucher (VN), VC-9

E-Mail: [email]mb-news-a (AT) linuxhaven (DOT) de[/email]
Deutsches Linux HOWTO Projekt: http://www.linuxhaven.de

--
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
Marco Budde
Guest





PostPosted: Sun Jul 20, 2003 9:03 am    Post subject: Re: Vector als Übergabeparameter Reply with quote

chris picard wrote:

Quote:
int minor(vector<int> a, vector<int> b)

funktioniert nicht.

Das ist aber korrekt. Allerdings erzeugst Du bei
der Übergabe eine Kopie, in der Regel willst Du

int minor (const vector<int> &a, const vector<int> &b);

benutzen. Durch die Referenz wird keine Kopie erzeugt
und mit const verhinderst Du, daß "minor" die Vektoren
verändern kann.

cu, Marco

--
S: Minolta: Winkelsucher (VN), VC-9

E-Mail: [email]mb-news-a (AT) linuxhaven (DOT) de[/email]
Deutsches Linux HOWTO Projekt: http://www.linuxhaven.de

--
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
Ulrich Schramme
Guest





PostPosted: Sun Jul 20, 2003 9:33 am    Post subject: Re: Vector als Übergabeparameter Reply with quote

"chris picard" <chrispi (AT) hotpop (DOT) com> schrieb im Newsbeitrag
news:bfcajk$utj$05$1 (AT) news (DOT) t-online.com...
Quote:
Hi, wie kann ich einen Vector als Übergabeparameter definieren?

int minor(vector<int> a, vector<int> b)

funktioniert nicht.


Schuss in´s Blaue: ich tippe mal, daß hier #include <vector> fehlt.

--
-- Ulli

www.u-schramme.de

--
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
chris picard
Guest





PostPosted: Sun Jul 20, 2003 1:01 pm    Post subject: Re: Vector als Übergabeparameter Reply with quote

Quote:
Schuss in´s Blaue: ich tippe mal, daß hier #include <vector> fehlt.

Ja, ihr habt alle richtig "geraten".

Ist aber auch wieder mal typisch, das Problem liegt an der banalsten
Stelle auf die man nicht mehr gukt weil man das ja gar nicht vergessen
haben kann...

--
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
chris picard
Guest





PostPosted: Sun Jul 20, 2003 1:05 pm    Post subject: Re: Vector als Übergabeparameter Reply with quote

Quote:
Aber du weisst, wie du den Wert behandeln musst, und dass ein 70000
sicherlich nicht mehr in ein DWORD passt. Gut, vielleicht nimmt der
dahinterstehende Datentyp mehr als 16Bit und somit die 70000 auf, aber
du wertest in deiner App nur die ersten 16Bit aus und speicherst auch
nur diese ...

Das verstehe ich nicht so ganz... Ein DWORD fast doch üblicherweise zwei
(double) WORD und diese bestehen in der Regel aus 2 BYTE.
Also DWORD = 2*2*BYTE= 4*BYTE = 32 BIT

Quote:
Jetzt klar, was dir der typedef bringt? Letztlich handelt es sich hier
nur um einen besseren #define, der dir hilft dein Programm zu strukturien.

Warum "besseres" #define ? Was macht typedef besser?


gruesse
chris

--
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
Christian Lackas
Guest





PostPosted: Sun Jul 20, 2003 3:27 pm    Post subject: Re: Vector als Übergabeparameter Reply with quote

* chris picard [So, 20 Jul 2003 at 13:05 GMT]:

Hallo Chris,

Quote:
Warum "besseres" #define ? Was macht typedef besser?

beim #define sieht der Compiler deinen Namen für den Typen nie, er wird
also auch nicht in Fehlermeldungen etc... auftauchen, da ja bereits im
Präprozessor entsprechend ersetzt wird.

Gruss
Christian
--
#! /usr/local/bin/bash
W="Wanze";M="Mauer";L="Lauer";for I in 5 4 3 2 1 0;do echo
"Auf der ${M:0:$I}, auf der ${L:0:$I} liegt ne dicke ${W:0:$I}"; done
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker


--
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
Markus Breuer
Guest





PostPosted: Sun Jul 20, 2003 5:16 pm    Post subject: Re: Vector als Übergabeparameter Reply with quote

Quote:
Aber du weisst, wie du den Wert behandeln musst, und dass ein 70000
sicherlich nicht mehr in ein DWORD passt. Gut, vielleicht nimmt der
dahinterstehende Datentyp mehr als 16Bit und somit die 70000 auf, aber
du wertest in deiner App nur die ersten 16Bit aus und speicherst auch
nur diese ...


Das verstehe ich nicht so ganz... Ein DWORD fast doch üblicherweise zwei
(double) WORD und diese bestehen in der Regel aus 2 BYTE.
Also DWORD = 2*2*BYTE= 4*BYTE = 32 BIT

Stimmt, ich meinte wohl WORD.

Quote:
Jetzt klar, was dir der typedef bringt? Letztlich handelt es sich hier
nur um einen besseren #define, der dir hilft dein Programm zu strukturien.

Warum "besseres" #define ? Was macht typedef besser?

#define wird durch den PräProzessor implementiert. Praktisch
gleichzusetzen mit einem suchen+ersetzen im Texteditor. C++ Prüfungen
finden nicht statt, weil der Compiler erst im nächsten Schritt
aufgerufen wird. typedef hingegen wird direkt durch den Compiler
umgesetzt. Beispielsweise werden hier Namespaces berücksichtigt, legst
du also ein typedef in einem Namespace an, so erkennt der Compiler
dieses. Der Präprozessor würde nur ersetzen!

Markus

--
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
Immanuel Albrecht
Guest





PostPosted: Sun Jul 20, 2003 5:29 pm    Post subject: Re: Vector als Übergabeparameter Reply with quote

"chris picard" <chrispi (AT) hotpop (DOT) com> wrote in news:bfe3r4$824$02$1 (AT) news (DOT) t-
online.com:

Quote:
Schuss in´s Blaue: ich tippe mal, daß hier #include <vector> fehlt.

Ja, ihr habt alle richtig "geraten".

Ist aber auch wieder mal typisch, das Problem liegt an der banalsten
Stelle auf die man nicht mehr gukt weil man das ja gar nicht vergessen
haben kann...

Jo. Deshalb tu ich vor jede Funktion die benötigten Includes nochmal
schreiben. Wenn die doppelt da sind störts nicht weiter, und so vergißt man
das auch nicht so schnell. Gleich beim schreiben von std::vector kommt bei
mir automatisch der include davor.
--
http://xrxixpx.rip-productions.de

--
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
Rolf Magnus
Guest





PostPosted: Sun Jul 20, 2003 8:46 pm    Post subject: Re: Vector als Übergabeparameter Reply with quote

Immanuel Albrecht wrote:

Quote:
"chris picard" <chrispi (AT) hotpop (DOT) com> wrote in
news:bfe3r4$824$02$1 (AT) news (DOT) t- online.com:

Schuss in?s Blaue: ich tippe mal, daß hier #include fehlt.

Ja, ihr habt alle richtig "geraten".

Ist aber auch wieder mal typisch, das Problem liegt an der banalsten
Stelle auf die man nicht mehr gukt weil man das ja gar nicht
vergessen haben kann...

Jo. Deshalb tu ich vor jede Funktion die benötigten Includes nochmal
schreiben. Wenn die doppelt da sind störts nicht weiter, und so
vergißt man das auch nicht so schnell. Gleich beim schreiben von
std::vector kommt bei mir automatisch der include davor.

Dann verwendest du wohl entweder keine Namespaces oder qualifizierst
immer alles voll, oder? Ich mache nämlich gerne sowas wie:

namespace foo
{

void Klasse::funktion1()
{
//...
}

int Klasse::funktion2(int x)
{
//...
}

} // namespace foo

Ein #include darf da natürlich nicht dazwischenstehen.

--
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
Immanuel Albrecht
Guest





PostPosted: Mon Jul 21, 2003 7:19 am    Post subject: Re: Vector als Übergabeparameter Reply with quote

Rolf Magnus <ramagnus (AT) t-online (DOT) de> wrote in news:bfev5k$bd9$03$1 (AT) news (DOT) t-
online.com:

Quote:
Immanuel Albrecht wrote:

"chris picard" <chrispi (AT) hotpop (DOT) com> wrote in
news:bfe3r4$824$02$1 (AT) news (DOT) t- online.com:

Schuss in?s Blaue: ich tippe mal, daß hier #include fehlt.

Ja, ihr habt alle richtig "geraten".

Ist aber auch wieder mal typisch, das Problem liegt an der banalsten
Stelle auf die man nicht mehr gukt weil man das ja gar nicht
vergessen haben kann...

Jo. Deshalb tu ich vor jede Funktion die benötigten Includes nochmal
schreiben. Wenn die doppelt da sind störts nicht weiter, und so
vergißt man das auch nicht so schnell. Gleich beim schreiben von
std::vector kommt bei mir automatisch der include davor.

Dann verwendest du wohl entweder keine Namespaces oder qualifizierst
immer alles voll, oder? Ich mache nämlich gerne sowas wie:

Stimmt. Gut, dass ich hier schon auf mgl. Fehler aufmerksam gemacht
werde, bevor ich sie überhaupt mache;)
Meistens hab ich aber eh nicht mehr als drei Funktionen in einer
Übersetzungseinheit. Bei Templates mach ich des auch nicht vor die
Funktion, weil ich die oft inline schreibe.

--
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
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
 


Powered by phpBB © 2001, 2006 phpBB Group