Zeiger auf Zeiger vs. Zeiger auf Pointerarray

andand

Grünschnabel
Hallo!

Ich hab hier mal wieder was aus den Abgruenden der Zeigerwelt. Ich habe folgende Klasse:

class CShop
{
private:
......
CShopItem *item[30]; // item is a pointer
public:
.....
CShopItem** getItem() const; // return pointer to start of the pointerarray
};

Item soll also dynamisch alloziiiert werden, was auch funktioniert. Wenn ich nun aber meinen Zeiger auf den ersten Zeiger im Zeigerarray item haben will (mit getItem) erfolgt ein Compilerfehler, und zwar folgender:

cannot convert from 'class CShopItem *const [30]' to 'class CShopItem ** ?

Warum? Eigentlich gibt es doch da nichts zu konvertieren!
item[30] ist ein Zeiger, denk ich, und *item[30] ist also mein Zeiger auf den Zeiger.
 
Code:
CShopItem *item[30]; // item is a pointer
Das macht item zu einem festen Array von 30 Pointern auf CShopItems, die aber noch nicht initialisiert sind. Hilft dir das weiter?
 
Original geschrieben von andand
        CShopItem** getItem() const; // return pointer to start of the pointerarray
Wenn ich nun aber meinen Zeiger auf den ersten Zeiger im Zeigerarray item haben will (mit getItem) erfolgt ein Compilerfehler, und zwar folgender:
        cannot convert from 'class CShopItem *const [30]' to 'class CShopItem ** ?
Warum?
Könntest Du die Code-Zeile zitieren, wegen der der Compiler den Fehler bringt? Das würde weiterhelfen. Dann wäre z.B. ersichtlich, ob Du eine Zuweisung auf item oder auf item[0] machst.

Der Musikant
 
@Katchelor:

Das hoert sich gut an, so will ich das auch haben. Ich will nur sicherstellen, dass in der GetItems-Methode die Zeiger nicht veraendert werden. Wenn ich deshalb das const an meine Deklaration anhaenge, kommt aber diese Fehlermeldung "cannot convert ...".

Wenn ich const weglasse, meckert der Compiler nicht. Ich benutze uebrigens Visual 6.0.

Komisch, oder?
 
@Der Musikant

Die Fehlerzeile ist in der Klassendeklerarion (siehe Antwort an Katchelor), also:

CShopItem** getItems() const;

Das Problem ist das const. Wenn ich es weglasse, gibt es keine Fehlermeldung.
 
Zurück