Вам не нужны (13)
после объявлений / определений ваших двух std::vector
объектов;на самом деле, вы не можете иметь их. В заголовке вам нужно только объявить векторы;в вашем исходном файле списки инициализатора сообщат компилятору, что эти векторы должны содержать.
Объяснение: Хотя вы можете иметь такой оператор, как const std::vector<int> dinMon(13)
, в качестве "автономного" кода (он создастуказанный вектор с 13 элементами), вы не можете сделать это в объявлении статического члена класса: это, в конце концов, только объявление. Таким образом, просто простой векторный тип - и тогда определение (в Data.cpp) должно совпадать, поэтому у вас там тоже не может быть (13)
.
Кроме того, вам не хватает;
после объявления вашего Date
класса (то есть после закрывающей фигурной скобки в вашем заголовочном файле).
Date.h:
class Date {
private:
int month;
int day;
int year;
static const std::vector<std::string> monthNames;
static const std::vector<int> daysInMonths;
public:
Date();
Date(int month, int day, int year);
}; // You forgot the semicolon here!
Date.cpp:
#include "Date.h"
// #include <vector> // Don't need to re-include these, as they are already ...
// #include <string> // ... included by "Date.h"
const std::vector<std::string> Date::monthNames {
"", "January", "February", "March", "April", "May",
"June", "July", "August", "September", "October", "November", "December"
};
const std::vector<int> Date::daysInMonths { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Date::Date() : month(1), day(1), year(1900) {
}
Date::Date(int month, int day, int year) : month(month), day(day), year(year) {
}