- 最後登錄
- 2023-5-12
- 在線時間
- 24 小時
- 註冊時間
- 2013-6-14
- 閱讀權限
- 20
- 精華
- 0
- UID
- 13187073
- 帖子
- 47
- 積分
- 41 點
- 潛水值
- 13340 米
| 如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。 本帖最後由 在那裡 於 2019-3-24 12:30 AM 編輯
小弟在寫程式作業時,遇到了一個令我不解的問題:
由於是多檔案實作,程式碼有些長,我附上關鍵的程式碼就好。
使用的環境是Visual Studio 2017
首先是我定義的class
- class Month
- {
- private:
- int month;
- int translateStr(char a, char b, char c);
- std::string translateNum(int num);
- public:
- Month() : month(1) {};
- Month(char a, char b, char c);
- Month(int num);
- ~Month() {};
- void setMonth(int mon);
- void setMonth(char a, char b, char c);
- void inputInt();
- void inputStr();
- void inputFirstThreeLetters();
- void outputInt();
- void outputFirstThreeLetters();
- void outputStr();
- Month nextMonth();
- Month& operator=(Month& b); //出問題的函數,改為 Month& operator=(Month b);就沒問題
- };
複製代碼
再來是出問題的行數
在main中
- int main()
- {
- Month month1, month2(2), month3('M', 'a', 'r'), month4, month5, month6;
- //month3並無錯誤。
-
- month4 = month3.nextMonth(); //錯誤行數,訊息為:
- //error C2679: 二元運算子 '=': 找不到使用右方運算元類型 'Month' 的運算子 (或是沒有可接受的轉換)
- //note: 可能是 'Month &Month::operator =(Month &)'
- // note: 當嘗試符合引數清單 '(Month, Month)' 時
- .......
- return 0
- }
複製代碼
接下來是函數的實作
- Month& Month::operator=(Month& b)
- {
- if (&b == this)
- {
- return *this;
- }
- month = b.month;
- return *this;
- }
- Month Month::nextMonth()
- {
- return Month(month + 1);
- }
- Month::Month(int num)
- {
- setMonth(num);
- }
- void Month::setMonth(int mon)
- {
- if (mon <= 0 || mon > 12) //超出range
- {
- month = 1;
- }
- else
- {
- month = mon;
- }
- }
複製代碼
為了讓程式碼能正常運作
附上Month3所使用的建構函數
Month::Month(char a, char b, char c)
{
setMonth(a, b, c);
}
void Month::setMonth(char a, char b, char c)
{
setMonth(translateStr(a, b, c));
}
int Month::translateStr(char a, char b, char c)
{
std::string str = "";
str += a;
str += b;
str += c;
for (int i = 1; i <= 12; i++)
{
if (str == translateNum(i))
{
return i;
}
}
return 0; //error,查詢不到
}
std::string Month::translateNum(int num)
{
static std::string table[12] =
{
"Jan", //1月
"Feb", //2月
"Mar", //3月
"Apr", //4月
"May", //5月
"Jun", //6月
"Jul", //7月
"Aug", //8月
"Sep", //9月
"Oct", //10月
"Nov", //11月
"Dec" //12月
};
if (num <= 0 || num > 12)
{
return "";
}
else
{
return table[num - 1];
}
}
會出錯是不是因為傳遞的是自動變數,而不能使用reference的關係?還是說……?
... |
|