[C++] Problem mit Pointer bzw Klassen

alamos

Grünschnabel
Hallo,

ich nochmal :)
Also ich habe da ein Problem mit meiner Klasse. Diese hat jetzt 2 Methoden. setKey() und printKey(). Aber wenn ich den Key mit setKey() setze und danach printKey() ausführe, dann hat der Key komplett andere Werte als er haben sollte. Hab schon einiges ausprobiert aber ich komm da nicht weiter. Vielleicht kann mir hier ja wieder mal einer helfen.

die Klasse IDEA:

Code:
#include <cstdlib>
#include <iostream>
#define WORD unsigned short int

class IDEA
{
      private:
      WORD Key[7];
      WORD* Key_pt;
 
      void setKey(WORD* aKey)
      {
           for(int i = 0; i++; i <= 7)
                   Key[i] = *aKey; aKey++;
                   }
                   
      void printKey()
      {
           int j = 0;
           while(j <= 7)
           { printf("%X ", Key[j]); j++; }
           }
       
};

und meine Main.cpp zum testen:

Code:
#include <cstdlib>
#include <iostream>
#include <E:\Projekte\C\EncryptionTool\idea.cpp>
#define WORD unsigned short int

using namespace std;

int main(int argc, char *argv[])
{
    IDEA text;
    
    WORD Key[7];
    WORD* Key_pt = &Key[0];
    WORD SubKey[55];
    WORD* SubKey_pt;
    
    Key[0] = 1;
    Key[1] = 2;
    Key[2] = 3;
    Key[3] = 4;
    Key[4] = 5;
    Key[5] = 6;
    Key[6] = 7;
    Key[7] = 8;
    
    int i = 0;
    while(i <= 7)
    {
            printf("%X ", *Key_pt); Key_pt++; i++; }
    
    Key_pt = &Key[0];
    text.setKey(Key_pt);
    text.printKey();
     
    system("PAUSE");
    return EXIT_SUCCESS;
}

Weiß echt ncht mehr weiter. Vielleicht habe ich da was grundsätzliches zum Thema Zeiger nich verstanden... ka.

Gruß Martin
 
Code:
#include <cstdlib>
#include <iostream>
#define WORD unsigned short int

class IDEA
{
      private:
      WORD Key[7];
      WORD* Key_pt;
 
      void setKey(WORD* aKey)
      {
           for(int i = 0; i++; i <= 7)
                   Key[i] = *aKey; aKey++;
                   }
// 1. Überprüfe die Reihenfolge der einzelnen Elemente des Schleifenkopfes
// 2. Bei einem Array mit 7 Elementen hat das letzte Element den Index 6, nicht 7
                   
      void printKey()
      {
           int j = 0;
           while(j <= 7) //s.o. Punkt 2!
           { printf("%X ", Key[j]); j++; }
           }
    
};

main.cpp:
Code:
#include <cstdlib>
#include <iostream>
#include <E:\Projekte\C\EncryptionTool\idea.cpp>
// Eigentlich sollte man keine CPP-Dateien, sondern nur Headerdateien inkludieren.
#define WORD unsigned short int

using namespace std;

int main(int argc, char *argv[])
{
    IDEA text;
    
    WORD Key[7];
    WORD* Key_pt = &Key[0];
    // Simpler wäre: WORD* Key_pt = Key;
    WORD SubKey[55];
    WORD* SubKey_pt;
    
    Key[0] = 1;
    Key[1] = 2;
    Key[2] = 3;
    Key[3] = 4;
    Key[4] = 5;
    Key[5] = 6;
    Key[6] = 7;
    Key[7] = 8; // s.o. Punkt 2!
    
    int i = 0;
    while(i <= 7) // s.o. Punkt 2!
    {
            printf("%X ", *Key_pt); Key_pt++; i++; }
    
    Key_pt = &Key[0]; // hier würde auch Key_pt = Key reichen.
    text.setKey(Key_pt);
    text.printKey();
     
    system("PAUSE");
    return EXIT_SUCCESS;
}
Außerdem lässt deine Codeformatierung (Einrückung, Klammerungen) etwas zu Wünschen übrig ;)
 
Oh mein Gott. Ist ja richtig peinlich :) Habe länger nichts mehr programmiert und anscheinend vergessen, wie man eine for-schleife schreibt. Danke für den Hinweis.
Werde mir jetzt angewöhnen lieber auch sowas nochmal nachzugucken und mich
dabei nicht auf mein Gedächtnis zu verlassen.
Übrigens klappt das mit dem =&Key bei meinem Compiler nicht, der will echt, dass
man das als =&Key[0] angibt. Und das mit der Headerdatei weiß ich. Ich wollte allerdings
erst die Klasse komplett fertig haben, bevor ich einen Teil in eine Headerdatei auslager.
Jedenfalls viele dank!

Gruß,

Martin
 
Zurück