Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » illegal structure operation bei zwi-dim Array

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
12.05.2004, 11:32 Uhr
~Lillyy83
Gast


Hallo
ich hab ein kleines Problem.

Ich habe eine neue Klasse geschrieben und versuche ein 2-dim Array zu erstellen:

Klasse:Cat.cpp

C++:
#include "hCat.h"
void Cat::SetAge(int age)
{
    if (age>0 && age<12)
    {
       Age= age;
    }
}
int Cat::GetAge()
{
    return Age;
}
...



Die Headerdatei zur Klasse:
hCat.h

C++:
#ifndef hCat__h
#define hCat__h

class Cat {

//Variablen der Klasse
private:
int Age;

public:
//Funktionsdeklarationen für die Eingabe
void SetAge(int);

//Funktionsdeklarationen für die Ausgabe
int GetAge();
};
...
#endif



Die Datei, die die Katzen erstell
index.cpp

C++:
#include "hCat.h"      // Headerdatei zur Klasse
#include "hChange.h" //Header Datei zu Change.cpp
int main()
{
   Cat *katze [2][3];
   aendern(katze, 5);
}  
...



Und dann noch die Datei zum ändern
change.cpp

C++:
#include "hCat.h"       // Headerdatei zur Klasse
#include "hChange.h" //Header Datei zu Change.cpp

int aendern(Cat * katze, int alter )
{
   katze[0][0].SetAge(alter);
}  
...



Header Datei zu Change.cpp
hChange.h

C++:

int aendern(Cat *,  int );

...



Jedenfalls wenn ich jetzt compiliere zeigt der Borland Compiler den Fehler
illegal structure operation bei "katze[0][0].SetAge(alter);"


Ich hoffe, dass ich nicht wichtige vergessen habe, die Dateien sind nämlich extrem gekürzt um hier nicht alles voll zu schreiben. Darum auch die vielen Dateien, weil da noch viel, viel mehr an Quelltext da ist.

Kann mir vielleicht irgend jemand helfen?

Vielen Dank schon im Voraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.05.2004, 11:47 Uhr
typecast
aka loddab
(Operator)


Du übergibst der aendern-Funktion ein Cat*. Dabei handelt es sich um ein 1-dimensionales Array. Du versuchst aber auf ein Zwei-Dimensionales Array zuzugreifen. Das ist damit natürlcih nicht möglich.

Wenn du das zweidimesinale brauchst, dann solltest du Cat** schreiben...
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.05.2004, 12:13 Uhr
~Lillyy83
Gast


Hey

Danke so geht es.

Ich bin verblüfft, was ein * so ausmacht

Ich bin lausiger C++ Anfänger und hätte wahrscheinlich noch Stunden davor gesessen bis ich auf die Idee gekommen wäre.

Also nochmal vielen Dank

Lillyy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.05.2004, 13:38 Uhr
~Lillyy83
Gast


zu früh gefreut

ich hab schon wieder ein Problem:

bei dem Aufruf von " aendern(katze, 5);"
entsteht die Fhelermeldung "suspicious pointer conversion"

und beim Ausführen steht dann da:

"Fehler:access violation at 0x4041b8: write of address 0x0"

Definiere ich das Array irgendwie falsch? Oder gebe ich was falsches mit?


ich hab die Header datei jetzt so geändert:

C++:
int aendern(Cat **,  int );



und die change.cpp so:


C++:

#include "hCat.h"       // Headerdatei zur Klasse
#include "hChange.h" //Header Datei zu Change.cpp

int aendern(Cat ** katze, int alter )
{
   katze[0][0].SetAge(alter);
}  
...

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.05.2004, 15:21 Uhr
(un)wissender
Niveauwart


So geht es nicht hier nicht(oder willst du ein zweidimensionales Feld mit Cat-Pointern? Ich glaube nein.):

C++:
   Cat *katze [2][3];



Enweder dynamisch

C++:
cat ** katze;
katze = new Cat*[2];
for(int i = 0 ; i < 2; ++i)
{
      katze [i] = new Cat[3];
}



Zugriff dann mit:

C++:
katze[0][0].SetAge(...);



Oder statisch:

C++:
Cat katze[2][3];



Zugriff dann mit:

C++:
katze[0][0].SetAge();



Übergabe ab Funktion:

C++:
int aendern(Cat katze[][3], int alter )
{
   katze[0][0].SetAge(alter);
}  


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 12.05.2004 um 15:29 Uhr von (un)wissender editiert.
 
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: