[英]C++ functions, pass by reference
我在調用函數時將參數作為參考傳遞時遇到問題。 我們將使用以下指令構建一個程序:
通過編寫以下函數的函數定義和函數原型來完成上述程序:
displaymenu
此函數接受 num1 和 num2 作為通過引用傳遞的參數,並返回一個字符作為輸出。 該函數顯示菜單並接受以下用戶給定的輸入:A num1 B num1 num2 Q
checkeven
如果參數為偶數,則此函數返回 TRUE。 否則函數返回 FALSE。
divisible
如果第一個參數 num1 可以被第二個參數 num2 整除,則此函數返回 TRUE。
到目前為止,這是我的代碼並在傳遞參數時出錯。
#include <iostream>
using namespace std;
int num1, num2 = 0;
char displaymenu(int num1, int num2);
bool checkeven (int num1);
bool divisible (int num1, int num2);
int main(){
int num1, num2 = 0;
char choice;
do{
choice = displaymenu(num1,num2);
if (choice == 'A'){
if (checkeven(num1))
cout << num1 << " is even." << endl;
else
cout << num1 << " is odd." << endl;
}
else if (choice == 'B'){
if (divisible(num1, num2))
cout << num1 << " is divisible by " << num2 << endl;
else
cout << num1 << " is not divisible by " << num2 << endl;
}
else if (choice == 'Q')
cout << "Bye!" << endl;
else
cout << "Illegal input" << endl;
}while (choice != 'Q');
return 0;
}
char displaymenu(int &num1 = num1, int &num2 = num2){
char choice;
cout << '+' << "______________________________" << '+' <<endl;
cout << '|'<<"Choose an option: " <<" |"<<endl;
cout << '|'<<" A: Check if even |" <<endl;
cout << '|'<<" B: Check if divisible |" <<endl;
cout << '|'<<" Q: Quit |" <<endl;
cout << '+' << "______________________________" << '+' <<endl;
cout << " Reply: ";
cin>> choice>> num1>> num2;
return choice;
}
bool checkeven(int num1){
if (num1 % 2 == 0)
return true;
else
return false;
}
bool divisible(int num1, int num2){
if (num1 % num2 == 0)
return true;
else
return false;
}
我不會用完整的解決方案來回答(您可以自由改進您的問題,以便稍后獲得更好的答案),但關於問題標題,這里有一些提示。
您的聲明
char displaymenu(int num1, int num2);
和你的定義
char displaymenu(int &num1 = num1, int &num2 = num2)
應該有相同的簽名。 為了傳遞引用,將聲明更改為
char displaymenu(int &num1, int &num2);
此外,由於您通過引用傳輸值,您應該擺脫全局變量int num1, num2 = 0;
在using namespace std;
下方using namespace std;
. 他們不再需要了。 然后,通過刪除(不工作)標准值分配來修復displaymenu
函數定義。 在那之后,至少編譯器應該接受你的代碼,只是當你執行它時它在某些情況下不會真正起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.