我有一个工作代码,它给了我一个网格的地址(如果我是正确的):
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,...);
答案 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);