ポインタへのポインタを定義しているコンストラクタ呼び出し表記(declare-)を使用しているとき(割り当て表記の代わりに - 実行時に同じことを行う;これは単なる規約です)、コンパイラエラーが発生します。私はなぜこれが不思議だったのですか?コンストラクタ呼び出し表記でポインタ変数へのポインタを定義するのはなぜ不正ですか?
struct Foo
{ /* ... */ };
int main(int argc, char** argv)
{
Foo* parFoo = new Foo[2];
Foo** ppFoo(&parFoo); // invalid: C2059
Foo** ppFoo = &parFoo; // OK
delete[] parFoo;
}
エラーはC2059 - 無効なトークンであり、これはあまり言いません。ただし、&
は問題ではありません(つまり、演算子の優先順位エラーではない可能性があります)。私は次の操作を行う場合は、次の
int main(int argc, char** argv)
{
Foo* parFoo = new Foo[2];
Foo** ppFoo = &parFoo; // OK
Foo** ppFoo2(ppFoo); // invalid: C2061
delete[] parFoo;
}
を...そして私は、この時間は、それは間違った場所にありますppFoo
識別子だということを意味し、C2061を取得します。
これにはどのような構文規則がありますか。つまり、コンストラクタの呼び出し表記をポインタへのポインタの定義に使用できないのはなぜですか?
[私のための作品](http://ideone.com/OlIPKZ)たぶんこれはVisualC++のことです。 –
最初の例はideone.comを使ってうまくコンパイルされました(gccと思います)。おそらく間違いを犯したのは、Foo ** ppFoo2(ppFoo)でしょうか? < - note ppFoo。実際には、最初の例でも(重複した名前の)間違いがありますが、それは軽微です。 – queen3
@ queen3 +1のideone.comの提案については、それは非常にクールで、誤植を見つけるためです。それを今修正しました。問題はそれを持続する。 – zyndor