Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » struct array an funktion übergeben und bearbeiten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.07.2008, 23:15 Uhr
~SPuckfunkel
Gast


hi,
ich hab nen problem und zwar versuche ich ein struct array an eine funktion zu übergeben. die werte der structures des array sollen dann in der funktion verändert werden. am besten hier mal nen verkürzter codeausschnit

C++:
typedef struct {
    int    timestamp;
} PmEvent;

PmEvent buffer1[100];
PmEvent buffer2[100];

void tickToTime(PmEvent *srcBuffer, PmEvent *destBuffer, int anz) {
    for(int i=0; i<anz; i++) {
        destBuffer[i].timestamp = srcBuffer[i].timestamp + 20;
    }
}

void main(void) {
        tickToTime(buffer1, buffer2, 100);
}


buffer1 ist natürlich mit werten gefüllt (die structure ist natürlich komplexer, ich habe hier einiges vereinfacht um es zu verdeutlichen). der compiler (vc++2005 express) spuckt nen haufen fehler dazu aus. z.B:
error C2059: Syntaxfehler: '='
error C2143: Syntaxfehler: Es fehlt ')' vor ';'
error C2143: Syntaxfehler: Es fehlt ';' vor ')'
error C2059: Syntaxfehler: ')'

(alles zu der zeile "destBuffer[i].timestamp = srcBuffer[i].timestamp")

wenn ich den -> operator anstatt den punkt nehme, sagt der compiler
"error C2819: Der Typ 'PmEvent' hat keinen überladenen Elementoperator '->'"

ich wäre sehr dankbar, wenn mir jemand einen tipp geben könnte, was ich falsch mache.

eine zweiter frage: wie kann ich in einer klasse ein array von objekten anlegen, und dann auf sie zugreifen. ich probiere das gerade so (stark verkürzt):

C++:
class CClip{
public:
    int anz;
};

class CSequencer {
public:
    CClip *clips;
    CSequencer() {
        clips = new CClip[10];
    }
};

CSequencer sequencer;

void main(void) {
        sequencer.clips[0].anz = 2;
}


der compiler spuckt für die zeile in der main funktion solche fehler aus:
error C2059: Syntaxfehler: '='
error C2143: Syntaxfehler: Es fehlt ')' vor ';'
error C2143: Syntaxfehler: Es fehlt ';' vor '/'
error C2059: Syntaxfehler: ')'

ich wäre echt sehr dakbar, wenn einer von euch mir helfen könnte, da ich mit dem projekt gerade ein wenig unter zeitdruck bin.
gruß
andi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.07.2008, 10:33 Uhr
~helferlein
Gast


hallo,

also als erstes

void main() ist verboten ! pfui ! der standart schreibt

C++:
int main()
// oder
int main(int argc, char **argv)


vor

deshalb auchdie fehler, den an sich ist der obere code richtig

zu der klasse:

1. destruktor fehlt


C++:
class CClip
{
public:
    int anz;
};

class CSequencer
{
public:
    clips &operator [] (int pos)
    {
        return clips[pos];
    }
    CSequencer(int anzahl = 10)
    {
        anz = anzahl;
        clips = new CClip[anz];
    }
    ~CSequencer()
    {
        delete[] clips;
    }
private:
    CClip *clips;
    int anz;
};

CSequencer sequencer;

int main()
{
        sequencer[0].anz = 2;
}



der destruktor ist dafür da um die daten wieder zu löschen, sonst hättest du einen speicherleck.

der [] operator gibt dir das element per referenz(damit du es ändern darfst) zurück.

datenelemente immer privat halten !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.07.2008, 17:53 Uhr
0xdeadbeef
Gott
(Operator)


In der Annahme, dass es sich beim oberen Codestück um C (im Gegensatz zu C++) handelt, Visual Studio versteht kein C99. Das heißt,

C++:
    for(int i=0; i<anz; i++) {


ist problematisch, weil C89 diese Art der Inline-Syntax nicht erlaubt. Stattdessen:

C++:
    int i;
    for(i = 0; i < anz; ++i) {


Ich habe hier allerdings kein Visual Studio, um das zu testen, also ist es ein bisschen ein Schuss ins Blaue.

Oh, und natürlich kann main nicht void zurückgeben, wie oben bereits angemerkt. Eine kleine Feinheit dazu: Wo der C++-Standard die Form

C++:
int main()


erlaubt, erlaubt der C-Standard

C++:
int main(void)


In C++ besteht kein Unterschied zwischen () und (void), in C entspricht () allerdings (...) in C++. Mir ist allerdings kein C-Compiler bekannt, der int main() ablehnt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: