2012-04-15 3 views
2

я собирался закончить свое назначение, когда я получил проблему с операторнозначной перегрузкой, ошибка говоритзапись C++ operator-overload?

Ошибка 1 Ошибка C2661: «Дата :: Дата»: нет перегруженной функция принимает 3 аргумент C: \ Users \ 86 \ документы \ visual studio 2010 \ projects \ assignmnent 3 840 \ assignmnent 3 840 \ date.cpp 137

2 IntelliSense: экземпляр конструктора «Дата :: Дата» не соответствует списку аргументов c: \ users \ 86 \ documents \ visual studio 2010 \ projects \ assignmnent 3 840 \ assignmnent 3 840 \ date.cpp 137

и его маркировка Дата в дату возврата (mt, dy, yr); помогите, я уже пробовал эту штуку уже 3 часа.

здесь код

////////////////////date.h 


#include <iostream> 
using namespace std; 


class Date 
{ 
private: 
int day,month,year ; 

public: 

Date(); 
void setValues(); 
// int getValues() ; 
Date operator=(const Date &); 
// 
Date(const Date &); 
// 

//friend  Date operator+(Date a,Date b); 
Date operator-(const Date &); 


friend bool operator>(Date a, Date b); 
friend bool operator==(Date a, Date b); 
friend ostream &operator<<(ostream &out, Date a); 
friend istream &operator>>(istream &in, Date &a); 




// 



}; 

/////////////////date.cpp 

#include <iostream> 
using namespace std; 


class Date 
{ 
private: 
int day,month,year ; 

public: 

Date(); 
void setValues(); 
// int getValues() ; 
Date operator=(const Date &); 
// 
Date(const Date &); 
// 

//friend  Date operator+(Date a,Date b); 
Date operator-(const Date &); 


friend bool operator>(Date a, Date b); 
friend bool operator==(Date a, Date b); 
friend ostream &operator<<(ostream &out, Date a); 
friend istream &operator>>(istream &in, Date &a); 




// 



}; 

////////driver.cpp 
//test.cpp 
#include "date.h" 
#include <iostream> 
using namespace std; 
int main() 
{ 
Date date1; 
Date date2 = date1; //copy constructor called 

cout << "Initial date values\n"; 
cout << "Date 1 is "; 
cout << date1 << endl; 
cout << "Date 2 is "; 
cout << date2 << endl; 
cout << "Enter a date no earlier than 1800\n"; 
cin >> date1; 




cout << "Enter another date no earlier than 1800\n"; 
cin >> date2; 
cout << "Revised date values\n"; 
cout << "Date 1 is "; 
cout << date1 << endl; 
cout << "Date 2 is "; 
cout << date2 << endl; 

if (date1 == date2) 
cout << "The two input dates are the same\n"; 
else if (date1 > date2) 

{ 
cout << "Date 1 is later in time than Date 2 by "; 
Date temp = date1 - date2; 
cout << temp << endl; 
} 
else 
{ 
cout << "Date 2 is later in time than Date 1 by "; 
Date temp = date2 - date1; 
cout << temp << endl; 
} 



//Date date3, date4; 
//date4 = date3 = date2; //overloaded assignment operator called 
//cout << "After the assignment date4 = date3 = date2\n"; 
//cout << " Date 3 is " << date3 << " and Date 4 is " << date4 << endl; 
return 0; 
} 
+1

Можете ли вы предоставить сайт для звонков? линию, в которой вы фактически вызываете оператора? – smichak

ответ

2

В файле .cpp, вы не должны переопределить класс, но включают в себя заголовок и реализовать методы. Так, Date.h это нормально, но Date.cpp должно быть что-то вдоль линий:

//Date.cpp 
#include "Date.h" 

Date::Date() 
{ 
} 

void Date::setValues() 
{ 
} 
Date Date::operator=(const Date &) 
{ 
    return *this; 
} 
Date::Date(const Date &) 
{ 
} 
Date Date::operator-(const Date &) 
{ 
    return *this; 
} 
bool operator>(Date a, Date b) 
{ 
    return true; 
} 
bool operator==(Date a, Date b) 
{ 
    return true; 
} 
ostream &operator<<(ostream &out, Date a) 
{ 
    return out; 
} 
istream &operator>>(istream &in, Date &a) 
{ 
    return in; 
} 

Реализации отсутствуют, операторы должны быть объявлены в другом заголовке, возможно Date.h и operator = должен возвращать Date&, не Date . (хотя не обязательно

Кроме того, если вы хотите позвонить Date с 3 параметрами, вы, вероятно, хотите:

Date::Date (int day_, int month_, int year_) : 
    day(day_), month(month_), year(_year) 
{ 
} 

в вашем файле реализации, а также объявить этот конструктор в заголовке.

+0

Я не уверен, что ты имеешь в виду, если будешь каяться, можешь ли ты быть более конкретным, я только начинаю все это программировать и все еще нуб :) спасибо. – user1335175

+0

@ user1335175 Я был довольно специфичен. Вы не должны переопределять класс в файле '.cpp', вам нужно реализовать методы там. –

+0

Спасибо, я исправил свою программу, добавив 3 конструктора параметров :) – user1335175