konstates int Array

haubex

Mitglied
Hallo an alle,

ich will in meiner Klasse mit einem Zeiger auf ein konstantes int-Array zeigen, nur klappt dies leider nicht so wie gewünscht...Wie gesagt hab ich das konstante-int-Array in einer Header-Datei "Konstanten.h" initialisiert:

Konstanten.h
Code:
#ifndef _Konstanten_h
#define _Konstanten_h

...
const int anzahlReihe9 = 3;
...
const int reihe9[] = {8, 3, 5};
...
#endif

Nun will ich aus einer Klasse ein Zeiger auf dieses konstante Array zeigen lassen. Ich könnte deren Inhalt auch kopieren, aber das will ich konzeptionell nicht!

Ziffer.cpp
Code:
#include "Ziffer.h"
#include "Konstanten.h"

#include <iostream>
#include <stdlib.h>

using namespace std;

Ziffer::Ziffer(ZifferTyp typ) {
	switch(typ) {
		case neun:
			cout << "Ziffer 9" << endl << "   ";
			
                        /*
			 * int reiheNeun[anzahlReihe9];
                         *
			 * for(int i=0; i<anzahlReihe9; i++) {
			 *	reiheNeun[i] = reihe9[i];
			 *	cout << rnull[i] << endl;
			 * }
			*/

			int const *intp = reihe9;
			break;
		default:
			break;
	}
}
...

Ich weiß leider nicht warum dies nicht klappt, hab auch mehrere Möglichkeiten schon getestet. Das Konzept würde ich jedoch gern beibehalten, da ich diese konstanten Arrays nicht immer wieder für jeden Fall kopieren will (wie im auskommentiertem Fall), sondern einfach nur auf das Array zeigen will.
 
Hi.

Was heißt denn "es geht nicht"? Kannst du es nicht kompilieren? Wann ja, wie lauten die Fehlermeldungen? Oder stürzt das Programm ab? Was "geht nicht"?

Gruß
 
Fehlermeldung:
Code:
error C2440: '=': 'const int [1]' kann nicht in 'int *' 
konvertiert werden.
Durch die Konvertierung gehen Qualifizierer 
verloren

Hab jetzt eine brauchbare Lösung gefunden, indem ich das Array auf "static" setze. Nur leider kann ich das Array immer noch nicht als konstantes aufrufen. Wie müsste der Zeiger dazu aussehen?

Konstanten.h
Code:
#ifndef _Konstanten_h
#define _Konstanten_h

...
const int anzahlReihe9 = 3;
...
// sollte aber auch als const definiert sein
static int reihe9[] = {8, 3, 5};
...
#endif

Ziffer.cpp
Code:
...
Ziffer::Ziffer(ZifferTyp typ) {
        int *intp;

	switch(typ) {
		case neun:
			cout << "Ziffer 9" << endl << "   ";
                         // funktioniert, sollte aber auf konstantes Array zeigen :(
			intp = reihe9;  
			break;
		default:
			break;
	}
}
...

Mein int-Pointer funktioniert soweit. Alles wunderbar. Ich möchte nun aber auf ein konstantes Feld in der "Konstanten.h" zeigen...wie im Code beschrieben :/

so:
Code:
static const int reihe9[] = {...};

Wie müsste der Pointer darauf aussehen?
Code:
int const *ip;   // ?
 
Fehlermeldung:
Code:
error C2440: '=': 'const int [1]' kann nicht in 'int *' 
konvertiert werden.
Durch die Konvertierung gehen Qualifizierer 
verloren
Das kann ich nicht nachvollziehen. Wo ist denn der "const" Qualifizierer des Pointers hin?
Mein int-Pointer funktioniert soweit. Alles wunderbar. Ich möchte nun aber auf ein konstantes Feld in der "Konstanten.h" zeigen...wie im Code beschrieben :/

so:
Code:
static const int reihe9[] = {...};

Wie müsste der Pointer darauf aussehen?
Code:
int const *ip;   // ?
So sollte es funktionieren. Bei mir (Compiler: GCC) tut es das auch. Was hast du denn für eine Version von VirtualC++?

Alternativ könntest du auch schreiben:
C++:
const int* p = reihe9;
Das bedeutet allerdings das Gleiche.

Gruß
 
Die Fehlermeldung macht mich auch ziemlich unschlüssig und sagt nix aus. Zumindest in meinen Augen. Hab VS 2005 und den dazu gehörigen GCC++ Compiler.
Welcher genau das ist weiß ich grad gar nicht... ;)

Kann aber sein, das es damit zusammenhängt, da ich auch beim einbinden des iostreams kein ostream- bzw. istream-Objekt ansprechen kann. (Mal so als Beispiel)
 

Neue Beiträge

Zurück