C++ 公职人员职能问题
我是OOP->的初学者,我有一个包含3个私有变量成员的类日期,a应该以2种方式打印日期:C++ 公职人员职能问题,c++,visual-c++,C++,Visual C++,我是OOP->的初学者,我有一个包含3个私有变量成员的类日期,a应该以2种方式打印日期: 2010年12月25日 2010年12月25日 下面的代码显示了该错误: date.obj:错误LNK2019:未解析的外部符号“public:u thiscall date::date(void)”(?0日期)@@QAE@XZ)在函数“public:void _thiscall Date::printDate(void)”中引用(?printDate@Date@@QAEXZ) 我做错了什么? 日期:h #
#包括
#包括
#ifndef日期
#定义日期
上课日期
{
私人:
国际日;
整月;
国际年;
公众:
日期();
日期(整数d,整数m,整数y)
{
d=d;
月=m;
年份=y;
}
int getDay()常量{return day;}
int getMonth()常量{return month;}
int getYear()常量{返回年份;}
作废打印日期(作废);
};
#恩迪夫
date.cpp
#include"date.h"
#include<iostream>
#include<string>
const int NR=12;
void Date::printDate()
{
Date newDate;
std::string Months[]={"January","February", "March" , "April", "May", "June", "July", "August", "September", "Octomber", "November", "December"};
int position;
std::string month;
position=newDate.getMonth();
for(int i=0;i<NR;i++)
{
if(i==position)
{
month=Months[i];
}
}
std::cout<<month<<" "<<newDate.getDay()<<" "<<newDate.getYear()<<std::endl;
}
#包括“date.h”
#包括
#包括
常数int NR=12;
作废日期::打印日期()
{
日期newDate;
std::string Months[]={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
内部位置;
std::字符串月份;
position=newDate.getMonth();
对于(int i=0;i而言,错误非常明显:您为Date
类声明了构造函数,但未在cpp文件中定义它们
您应该为这些构造函数添加定义。它们可以如下所示:
Date::Date() {}
或许
Date::Date() {
d = 1;
m = 1;
y = 1970;
}
如果你打电话的话,至少不会打印废话
Date myDate;
myDate.printDate();
编辑:
正如Mat所建议的,您应该尽可能使用构造函数初始值设定项列表。使用参数的其他构造函数在初始化列表中如下所示:
Date(int d, int m, int y) :
day(d), month(m), year(y) {}
在您的情况下,构造函数在天
、月
和年
调用空构造函数,然后为它们赋值,而在使用初始化列表时,日期
构造函数使用天
、月
和年
的参数调用构造函数,错误是非常清楚:您为Date
类声明了构造函数,但没有在cpp文件中定义它们
您应该为这些构造函数添加定义。它们可以如下所示:
Date::Date() {}
或许
Date::Date() {
d = 1;
m = 1;
y = 1970;
}
如果你打电话的话,至少不会打印废话
Date myDate;
myDate.printDate();
编辑:
正如Mat所建议的,您应该尽可能使用构造函数初始值设定项列表。使用参数的其他构造函数在初始化列表中如下所示:
Date(int d, int m, int y) :
day(d), month(m), year(y) {}
在您的情况下,构造函数在天
、月
和年
调用空构造函数,然后为它们赋值,而在使用初始化列表时,日期
构造函数调用构造函数,并使用天
、月
和年
的参数正确的做法是进行必要的更改以消除错误。但您的代码仍然非常错误。显然,您正在与面向对象进行斗争
在printDate
方法中,您应该只打印出日期类的成员变量。您不应该声明新变量。按如下方式执行
void Date::printDate()
{
std::cout<<Months[m]<<" "<<d<<" "<<y<<std::endl;
}
void Date::printDate()
{
alestanis对于消除错误所需的更改是正确的。但是您的代码仍然是非常错误的。显然,您正在与面向对象进行斗争
在printDate
方法中,您应该只打印出日期类的成员变量。您不应该声明新变量。按如下方式执行
void Date::printDate()
{
std::cout<<Months[m]<<" "<<d<<" "<<y<<std::endl;
}
void Date::printDate()
{
std::coutHmmmm,我想你可能也误解了很多东西。首先,成员数据:在printDate()函数中,你可以直接引用date对象的成员变量。其次,循环不需要这些,你可以说
months[position]
第三,const global不是存储数组大小的最佳方法。如果需要知道数组的大小,可以调用
months.size()
第四,月数组可以是成员数据,因此不需要每次调用printDate时都声明它。最后,不需要在cpp文件中包含头文件中已经包含的任何内容
因此,您的新类应该如下所示:
Date::Date() {}
日期:h:
#include<iostream>
#include<string>
#ifndef DATE_H
#define DATE_H
class Date
{
private:
int day;
int month;
int year;
const std::string months[] = {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"};
public:
Date(){}
Date(int d, int m, int y)
int getDay() const {return day;}
int getMonth() const {return month;}
int getYear() const {return year;}
void printDate(void);
};
#endif
#包括
#包括
#ifndef日期
#定义日期
上课日期
{
私人:
国际日;
整月;
国际年;
const std::字符串月份[]={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
公众:
日期(){}
日期(整数d,整数m,整数y)
int getDay()常量{return day;}
int getMonth()常量{return month;}
int getYear()常量{返回年份;}
作废打印日期(作废);
};
#恩迪夫
然后Date.cpp:
#include "Date.h"
Date::Date(int d, int m, int y)
{
day=d;
month=m;
year=y;
}
void Date::printDate(void)
{
std::cout<<months[month]<<" "<<day<<" "<<year<<std::endl;
}
#包括“Date.h”
日期:日期(整数d,整数m,整数y)
{
d=d;
月=m;
年份=y;
}
作废日期::打印日期(作废)
{
std::coutHmmmm,我想你可能也误解了很多东西。首先,成员数据:在printDate()函数中,你可以直接引用date对象的成员变量。其次,循环不需要这些,你可以说
months[position]
第三,const global不是存储数组大小的最佳方法。如果需要知道数组的大小,可以调用
months.size()
第四,月数组可以是成员数据,因此不需要每次调用printDate时都声明它。最后,不需要在cpp文件中包含头文件中已经包含的任何内容
因此,您的新类应该如下所示:
Date::Date() {}
日期:h:
#include<iostream>
#include<string>
#ifndef DATE_H
#define DATE_H
class Date
{
private:
int day;
int month;
int year;
const std::string months[] = {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"};
public:
Date(){}
Date(int d, int m, int y)
int getDay() const {return day;}
int getMonth() const {return month;}
int getYear() const {return year;}
void printDate(void);
};
#endif
#包括
#包括
#ifndef日期
#定义日期
上课日期
{
私人:
国际日;
整月;
国际年;
常量标准::字符串月份[]={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”