我正在嘗試創建一個簡單的日期類,但是在我的主文件中出現錯誤,說「重載的Date()調用不明確。」我不知道爲什麼,因爲我認爲只要我的構造函數有不同的參數,我就沒問題。這裏是我的代碼:模糊的構造函數調用
頭文件:
#ifndef DATE_H
#define DATE_H
using std::string;
class Date
{
public:
static const int monthsPerYear = 12; // num of months in a yr
Date(int = 1, int = 1, int = 1900); // default constructor
Date(); // uses system time to create object
void print() const; // print date in month/day/year format
~Date(); // provided to confirm destruction order
string getMonth(int month) const; // gets month in text format
private:
int month; // 1 - 12
int day; // 1 - 31
int year; // any year
int checkDay(int) const;
};
#endif
.cpp文件
#include <iostream>
#include <iomanip>
#include <string>
#include <ctime>
#include "Date.h"
using namespace std;
Date::Date()
{
time_t seconds = time(NULL);
struct tm* t = localtime(&seconds);
month = t->tm_mon;
day = t->tm_mday;
year = t->tm_year;
}
Date::Date(int mn, int dy, int yr)
{
if (mn > 0 && mn <= monthsPerYear)
month = mn;
else
{
month = 1; // invalid month set to 1
cout << "Invalid month (" << mn << ") set to 1.\n";
}
year = yr; // could validate yr
day = checkDay(dy); // validate the day
// output Date object to show when its constructor is called
cout << "Date object constructor for date ";
print();
cout << endl;
}
void Date::print() const
{
string str;
cout << month << '/' << day << '/' << year << '\n';
// new code for HW2
cout << setfill('0') << setw(3) << day; // prints in ddd
cout << " " << year << '\n'; // yyyy format
str = getMonth(month);
// prints in month (full word), day, year
cout << str << " " << day << ", " << year << '\n';
}
和我的main.cpp
#include <iostream>
#include "Date.h"
using std::cout;
int main()
{
Date date1(4, 30, 1980);
date1.print();
cout << '\n';
Date date2;
date2.print();
}
我同意GMAN寫道。但是,如果你聲明默認構造函數是私有的,編譯器會抱怨同樣的錯誤。實際上,它試圖組裝兩個「相同」或相同的方法。 – 2010-04-20 08:59:05
您還應該在參數中包含參數名稱。雖然他們沒有技術上的必要性,但如果沒有挖掘源文件,就無法知道用戶是應該提供(月,日,年)還是(日,月,年)。我還會根據GMan關於不提供默認參數的建議。在什麼情況下,只要在六月份,有人會隨機抽出一天呢? – 2010-04-20 09:16:55