我是 C 的完全初學者,被指派撰寫一個回傳數字因數的函式。下面,我包含了我也創建的函式,該函式print_vector將把向量的所有元素列印到控制臺。
在我的作業中,為了檢查factorize函式是否正常作業,我們必須使用test_factorize提供的函式,我也包括在內。但是,我遇到的問題是test_factorize由于錯誤“對非常量參考的初始值必須是左值” ,給定的不起作用。我不確定這意味著什么以及為什么會test_factorize遇到問題,因為 的輸出factorize是一個向量,而 的輸入print_vector也是一個向量,所以我不明白為什么test_factorize導致錯誤的內容,盡管我懷疑它可能是我定義的“factorize”函式中導致此錯誤的內容。
#include <iostream>
#include <vector>
using namespace std;
void print_vector(std::vector<int>& v) {
for (int i = 0; i < v.size(); i ) {
cout << v[i] << " ";
}
cout << endl;
}
std::vector<int> factorize(int n) {
std::vector<int> answer;
for (int i = 1;i < n 1; i) {
if (n % i == 0) {
answer.push_back(i);
}
}
return answer;
}
void test_factorize() {
print_vector(factorize(2));
print_vector(factorize(72));
print_vector(factorize(196));
}
uj5u.com熱心網友回復:
錯誤來自這一行:
void print_vector(std::vector<int>& v) {
由于您沒有const在引數型別中包含關鍵字,您(隱式)表明print_vector有權修改v.
但是,您print_vector()使用臨時物件(由 回傳的向量factorize())作為引數進行呼叫,并且 C 不允許您通過非常量參考傳遞臨時物件,大概是基于對臨時物件進行更改毫無意義的理論(因為臨時函式會在函式呼叫回傳后立即銷毀,因此對其所做的任何更改都無效),因此必須是程式員錯誤。
無論如何,修復很容易,只需將您的函式宣告更改為:
void print_vector(const std::vector<int>& v) {
...這將允許您向它傳遞對臨時向量的參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/364515.html
下一篇:Python精簡if陳述句
