2016-08-28 1 views
-1

これは多少の関連ですが、またに異なるビット:同じくらい私は理解し変換は修飾子を失いますが、ないではない、本当に

error C2440: 'initializing': cannot convert from 'const git_commit *const *' to 'const git_commit **'

:私は次のエラーを取得しています私のコードではC++ "conversion loses qualifiers" compile error

T **からconst T **への代入はconstの規則に違反することを許します。ここで私が与えた例では、const T * const *からconst T **に代入すると実際には定数を得ることができます。どこに/なぜこれが問題なのですか?

答えて

1
const git_commit * const * 

定数git_commits

const git_commit * * 

可変配列へのconst配列を割り当てる定数git_commits

へのポインタの可変配列へのポインタへのポインタの定数配列へのポインタは、CONSTを失い。

+1

こんにちは、ありがとうございました。私は理解していると思いますが、あなたの解釈は、実際には配列があることを保証していない単語「配列」を使用しているやや不正確です。最初はconstオブジェクトへのポインタへのポインタへのポインタとして読み込む必要があります。あなたの答えをありがとう。 –

+0

そうではありません...ポインタへのポインタは、ポインタの配列へのポインタではありません(これは '***'となり、[3つ星のプログラマ]になります(http://c2.com/cgi/ wiki?ThreeStarProgrammer)は推奨されません)。何かあれば 'git_commit'オブジェクトの配列へのポインタかもしれません。または 'git_commit'オブジェクトの「2d」配列。 –

-1
int const x = 7; 
std::cout << x << '\n'; // compiler can optimize to 7 
int const* const px = &x; 
std::cout << *px << '\n'; // compiler can optimize to 7 

int const*const* ppx = &px; 
std::cout << **ppx << '\n'; // compiler can optimize to 7 

int const** ppx_cheat = ppx; // illegal, but presume we are allowed to do it 
int const y = 1; 
int const* py = &y; 
*ppx_cheat = py; 
std::cout << **ppx << '\n'; // compiler can optimize to 7, *but is wrong* 
+1

ここで起こっていることではありません。 OPには、 'const T *'から 'T *'への標準的な不正な変換があります。 (私は最初に同じミスを犯しました) –

+0

本当にあなたは?上記で生成されたエラーはOPのnoと一致しますか? – Yakk

+0

いいえ、私が言ったことと一致しません。 –

関連する問題