0

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

MyMesh &mesh = glWidget->mesh();

现在我想 if thingie 分配不同的网格地址。一个是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,...);
4

3 回答 3

2

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

MyMesh &mesh;

其中mesh是对对象的非常量左值引用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 回答