带有if语句的指针(地址)

时间:2012-05-22 21:40:05

标签: c++ pointers reference pointer-address

我有一个工作代码,它给了我一个网格的地址(如果我是正确的):

MyMesh &mesh = glWidget->mesh();

现在我想要ifie来分配不同的网格地址。一个是mesh()第一个函数和另一个函数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,...);

3 个答案:

答案 0 :(得分:2)

引用必须在初始化时绑定到对象...您不能使用默认初始化或零初始化引用。所以代码如下:

MyMesh &mesh;

其中mesh是对Mesh对象的非常量l值引用,本质上是不正确的。在声明时,必须将非常量引用绑定到有效的内存可寻址对象。

答案 1 :(得分: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, ... );

答案 2 :(得分: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);