2017-09-10 1 views
1

Ich habe das C++ Primer Buch vor ein paar Tagen gekauft, und ich habe angefangen, diese neue Sprache zu lernen!Lernen von C++: Warum ist das illegal?

Im Moment versuche ich, dieser Block Ich schrieb undestand warum ich illegal ist:

ich ein const int zu 512 initialisieren; Ich initialisiere einen const int const Zeiger auf n; Aber es erlaubt mir nicht, eine const int const Zeiger auf Zeiger zu erstellen, auch richtig die doppelte ** und alles mit:

const signed int n = 512; 
const signed int *const nPointer = & n; 
const signed int **const nPointer2 = & nPointer; 

Hat jemand eine einfache Erklärung haben? Vielen Dank für Ihre Zeit!

+0

welche Fehler haben Sie bekommen? –

+6

In der letzten Zeile steht ein 'const' an der falschen Stelle:' const signed int * const * nPointer2 = & nPointer; 'Es spielt keine Rolle, ob' nPointer2' 'const' ist (dh, zu machen ist zeigen Sie auf etwas anderes) - was wichtig ist, ist das, worauf es hindeutet, ist "const". –

+0

oh danke, jetzt verstehe ich! – MrMaxcrime

Antwort

0

Zuerst vereinfachen Sie das Problem und entfernen Sie das signierte. Das Problem bleibt gleich Zweitens, verwenden Sie einen Compiler und lesen Sie die Fehlermeldung. Dies gilt für alle Sprachen, nicht nur C++ Das Problem ist hier:

const int **const nPointer2 = & nPointer; 

nPointer Typ const int unterzeichnet * const

Ihre Anweisung ist

const signed int **const nPointer2 = & nPointer; 

So erhalten Sie die folgende Nachricht:

error: invalid conversion from 'const int* const*' to 'const int**'

Wie Sie sehen, const ist zwischen Ihren beiden sta rs. Erstellen eines Kompilierungsfehlers

Wie Sie unter Verwendung & puts sehen * an der Ende.

1

Um den Code zu beheben haben Sie zwei Möglichkeiten:

//Option one : 
const signed int *const nPointer = & n; 
const signed int *const *const nPointer2 = & nPointer; 
//Option two : 
const signed int * nPointer = & n; 
const signed int **const nPointer2 = & nPointer; 

Erläuterung:

wenn nPointer ein konstanter Zeiger auf T ist, auf einen konstanten Zeiger zeigen auf T, wie in der nPointer2 sollte erste Wahl. Wenn nPointer2 ein Zeiger auf einen nichtkonstanten Zeiger auf T ist, sollte der Zeiger nPointer alternativ auch nicht-konstant sein.

, wenn Sie auf den Teil des Buches, wo Sie Ihre eigene Art Aliase definieren, können Sie die Unordnung entfernen, um zu sehen, wie diese Alternativen funktionieren wie folgt:

//simplifying notation: 
using myType = const signed int *; 
using myTypeC = const signed int * const; 

//your code equivalent to: 
myTypeC nPointer = & n; 
myType *const nPointer2 = & nPointer; 

//Option One:  
myTypeC nPointer = & n; 
myTypeC *const nPointer2 = & nPointer; 
//Option Two:  
myType nPointer = & n; 
myType *const nPointer2 = & nPointer; 
Verwandte Themen