2012-05-22 106 views
0

我有給了我一個網狀的地址的工作代碼(如果我是正確的):指針(地址),if語句

MyMesh &mesh = glWidget->mesh(); 

現在我想如果的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,...); 
+1

這是一個參考,而不是一個指針。 – 0xC0000022L

+1

您在glWidget上調用的mesh()函數的簽名是什麼?它是否會返回MyMesh,MyMesh&或MyMesh *? – SirPentor

+0

'if(meshNum> 1 || meshNum <0)return; MyMesh&mesh(meshNum == 0?glWidget-> mesh():glWidget-> mesh(0));' –

回答

2

如果你的情況是足夠的meshNum約束簡單,你可以使用?:操作:

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

否則,你需要一個指針,因爲引用必須將在定義點initializated,而不能重新提到其他任何東西。

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

function(*mesh, ...); 
+0

永遠是三元條件的粉絲!但是,你忘了關閉這個條件。 –

2

引用...你不能有一個默認初始化或零初始化參考。所以這樣的代碼:

MyMesh &mesh; 

其中mesh是非恆定-1-值參照Mesh對象,是固有的形成不良。在聲明時,您必須將非常量引用綁定到有效的內存尋址對象。

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);