0

次のコードのエラーを説明してください。

void foo(void*& param)
{
    param = new char[10];
}

void main()
{
    int* p;
    foo(p);
}

error C2664: 'foo' : cannot convert parameter 1 from 'int *' to 'void *&'

任意のポインター型で関数を呼び出し、関数内でそのポインターを変更するにはどうすればよいですか (そのアドレスの値ではなく、アドレス自体)。テンプレートやダブル ポインターを使用したくありません。

4

2 に答える 2

2

ポインタを更新したい場合は、ポインタをポインタに渡す方が良い

void foo(void** param)
{
    *param = new char[10];
}

void main()
{
    void* p;
    foo(&p);
    int* p2 = (int*)p;
}
于 2012-05-11T13:12:44.523 に答える
2

int*にas 引数を渡せないのはなぜfですか?

問題は、それが許可された場合、型システムを壊してしまうことです。正直に言うと、まさにあなたがやろうとしていることです...型システムを壊したい場合は、キャストによって明示的に要求する必要があります。

キャストを使用したくないことをコメントで指摘しますが、コンパイラは型システムを壊してほしくありません。その意志の戦いでは、コンパイラを納得させるつもりはないと思います...それはあまりにも頑固です。

于 2012-05-11T13:54:56.597 に答える