0

私はメッシュのアドレスを私に与えた作業コードを持っていました(私が正しければ):

MyMesh &mesh = glWidget->mesh();

ここで、異なるメッシュ アドレスを割り当てたいと思います。1 つは mesh() の最初の関数で、もう 1 つの関数は mesh(int) です: これはどのように行われますか?

 MyMesh &mesh;  //error here: need to be initialized

 if(meshNum==0){
mesh = glWidget->mesh();
 }
 else if (meshNum==1){
mesh = glWidget->mesh(0);
 }
 else{
  return;
 }

 //mesh used in functions...
 function(mesh,...);
4

3 に答える 3

2

参照は初期化時にオブジェクトにバインドする必要があります...デフォルトで初期化された参照またはゼロで初期化された参照を持つことはできません。したがって、次のようなコード:

MyMesh &mesh;

wheremeshはオブジェクトへの非定数の左辺値参照でありMesh、本質的に形式が正しくありません。宣言の時点で、非定数参照を有効なメモリ アドレス指定可能オブジェクトにバインドする必要があります。

于 2012-05-22T21:43:21.203 に答える
2

meshNumケースが制約されているほど単純な場合は、次の?:演算子を使用できます。

MyMesh &mesh = (meshNum == 0) ? glWidget->mesh() : glWidget->mesh(0);

それ以外の場合、参照は定義ポイントで初期化する必要があり、他のものを参照するために再配置できないため、ポインターが必要です

MyMesh *mesh = 0;
if( meshNum == 0 ) {
    mesh = &glWidget->mesh();
} else if ( meshNum == 1 ){
    mesh = &glWidget->mesh(0);
}

function( *mesh, ... );
于 2012-05-22T21:44:12.340 に答える
0

参照は正常に動作するプログラムでは常に有効であるため、そうすることができません。ただし、次の理由だけではありません。

if(meshNum != 0 && meshNum != 1)
    return;
function((meshNum == 0) ? glWidget->mesh() : glWidget->mesh(0));

または、ポインターを使用して後で参照することもできます。

MyMesh *mesh = 0;
if(meshNum==0) {
    mesh = &glWidget->mesh();
}
else if (meshNum==1) {
    mesh = &glWidget->mesh(0);
}
else {
  return;
}

function(*mesh);
于 2012-05-22T21:44:28.960 に答える