ungültige Konvertierung von 'const int*' to 'int*'
Erhalte ich die folgende Fehlermeldung
$ g++ test.cpp
test.cpp: In function ‘int test1(const int**, int)’:
test.cpp:11:14: error: invalid conversion from ‘const int*’ to ‘int*’ [-fpermissive]
a=v[i];
^
test.cpp: In function ‘int main()’:
test.cpp:31:20: error: invalid conversion from ‘int**’ to ‘const int**’ [-fpermissive]
cout<<test1(c,2)<<endl;
^
test.cpp:4:5: error: initializing argument 1 of ‘int test1(const int**, int)’ [-fpermissive]
int test1(const int **v,int num)
^
beim kompilieren des folgenden Codes:
#include <iostream>
using namespace std;
int test1(const int **v,int num)
{
int *a;
int result=0;
//do somethings ....
for(int i=0;i<num;i++)
{
a=v[i];
//do somethings ....
result+=*a;
}
return result;
}
void test2(const int num)
{
cout<<num<<endl;
}
int main()
{
int a =5;
int b =8;
int **c;
c=new int *[2];
c[0]=&a;
c[1]=&b;
cout<<test1(c,2)<<endl;
test2(a);
delete [] c;
return 0;
}
gebe ich einen int
zu test2 die Frage nach const int
und es ist ok. allerdings test1 nicht akzeptieren int **
statt const int **
.
im obigen code auch typecast nicht funktioniert:
a=(int *)v[i];
AFAIK, const bedeutet, dass ich verspreche, dass ich nicht ändern Sie den Wert von v
und ich nicht. aber der compiler gibt mir Fehler.
const int**
sollteint* const*
- Eigentlich sollte es wohl auch sein
int const * const *
da die Funktion nicht, ändern Sie den Zeiger in das übergebene array, noch die Werte, die Sie zeigen können. - Scheint wie eine Menge von nicht benötigten Zeiger für C++.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben Sie einfach
...dann const-Korrektheit beibehalten. Der compiler beschwert sich, weil Sie versuchen, zuweisen
v[i]
, die eineint const *
zuint *
, durch die die Elemente, diev
versprochen, würde nicht geändert werden, verändert werden könnte. Da Sie nicht versuchen, zu tun, die später, verwenden Sie einfach einenint const*
zu beruhigen die compiler.Beachten Sie, dass
a
bleibt eine Zeiger-variable (so werden Sie in der Lage sein, weisen Sie es), nur wird es zeigen Sie auf integer-Konstanten (die Sie nicht ändern Sie dann durcha
). Deklarieren Sie eine Konstante Zeiger, schreiben SieDer andere Fehler ist ähnlich wie in origin, aber es ist ein bisschen schwieriger zu sehen, warum es verboten ist (da Sie nur hinzufügen
const
und nicht versuchen, es zu nehmen). Prüfen: Wurden eine Abtretung vonint**
zuint const **
erlaubt, könnten Sie schreiben Sie den folgenden code:Und das wäre schlecht, mkay. Wenn Sie stattdessen schreiben
Nun
v
ist ein Zeiger (- Variablen) Zeiger auf Konstante(N) auf int-Konstante(s). Da*v
ist dann konstant, die Lücke ist geschlossen, und der compiler akzeptiert es.