2016-04-24 164 views
-2

我對c/C++相當陌生,我試圖爲遺傳算法構建一個程序(使用MS Visual Studio 2013)。我會告訴你這個程序的細節,但是我確實有'通過引用傳遞參數'的問題。 我可以通過引用另一個函數傳遞一個參數嗎?以下您可以找到我的代碼的一個簡單示例。C++通過參數傳遞函數中的另一個函數參數

struct solution{ 
int list1[100]; 
int list2[100]; 
int list3[100]; 
int list4[100]; 
}; 

void function1(solution& foo) 
{ 
// Algorithm that fills list2 
function2(foo); // Fills in list3 
function3(foo); // Fills in list4 
} 

void function2(solution& foo) 
{ 
// algorithm to fill in list3 
} 

void function3(solution& foo) 
{ 
// algorithm to fill in list4 
} 

void localSearch(solution& foo) 
{ 
for(int i = 0; i < 10; i++) 
{ 
    // Change a random value in list1 of foo 
    // Rerun function1 and see if it is a better solution 
    function1(foo); 
} 
} 

int main() 
{ 
solution bar; 
// Fill list1 of bar randomly by other function 

function1(bar); 
// Output finished solution 

return 0; 
} 

如果我嘗試這樣做,我得到的所有類型的錯誤......旁邊的是,我的解決方案結構被破壞,並在列表1中的第一位置隨機改變回0 我試過幾件事情緩解這一點,但似乎沒有任何工作。如果我只是通過值傳遞給function1的解決方案,程序似乎運行,但更慢,因爲它必須複製這個大結構。

所以我的問題是:

1)是否有可能對被引用傳遞給另一個函數傳遞參數(如附圖),在功能1?

2)什麼是更好的解決方案?

+0

只要通過他們,有什麼問題?沒有特殊的語法需要。 –

+1

我認爲你需要提前聲明'function2'和'function3',因爲你在'function1'中使用它們而不刪除它們。或者,您可以將'function1'移到上方。 – PcAF

+0

請**編輯您的帖子**並附上錯誤消息的樣本(比方說前10個)。 –

回答

0

1)是否有可能通過(通過引用)參數傳遞給另一個函數,在function1?

是的,可以通過引用另一個函數來傳遞相同的變量。

void f1(My_Class& m); // Forward declaration. 
void f2(My_Class& m); 

void f1(My_Class& m) // Definition. 
{ 
    f2(m); 
} 

void f2(My_Class& m) 
{ 
    ; 
} 

向前聲明給出了編譯器「擡起頭」上的功能如何被使用的(它們的語法)。沒有前向聲明,編譯器會從他們的定義中獲得知識。但是,定義或前向聲明必須在函數調用之前。

2)什麼是更好的解決方案?

這裏有一些想法,以提高您的解決方案:
1)使用std::vector代替陣列。

2)考慮結構的std::vector,而不是陣列的結構:

struct List_Record 
    { 
     int item1; 
     int item2; 
     int item3; 
     int item4; 
    }; 
    std::vector<List_Record> My_Lists(100); 
// or 
    List_Record My_Array[100]; 

具有項中的結構或記錄由所述處理器允許更好的數據高速緩存管理(中的所有項目一排連續放置)。

3)在初始化結構中創建一個方法。
您應該有一個構造函數來加載具有默認值的數據項。
考慮添加一個從文件加載數據項的方法(對測試非常有用)。

相關問題