2013-11-19 3 views
0

Я написал этот код и столкнулся с проблемой с прохождением конструктора с тремя аргументами, который устанавливает номер первого в номер, второй по размеру помещения, Здесь я застрял в трех частях чтобы установить стоимость номера, и устанавливает вместимость номера в 0 вот код, который я написалУстановка значения по умолчанию для переменной в конструкторе

#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 
#include <string> 


using namespace std; 

class HotelRoom 
{ 
private: 
string room_no; 
int Capacity; 
int occupancy; 
double rate; 
public: 
HotelRoom(); 
HotelRoom(string, int, int, double); 

}; 
HotelRoom::HotelRoom (string room, int cap, int occup = 0, double rt) 
{ 
room_no = room; 
Capacity = cap; 
occupancy = occup; 
rate = rt; 

cout << " Room number is " << room_no << endl; 
cout << " Room Capacity is " << Capacity << endl; 
cout << " Room rate is " << rate << endl; 
cout << "Occupancy is " << occup << endl; 
} 

int _tmain(int argc, _TCHAR* argv[]) 

{ 

cout << setprecision(2) 
    << setiosflags(ios::fixed) 
    << setiosflags(ios::showpoint); 

HotelRoom Guest (" 123", 4, 55.13); 


system("pause"); 
return 0; 
} 

ответ

4
HotelRoom::HotelRoom (string room, int cap, int occup = 0, double rt) 

является незаконным, если значения по умолчанию они должны либо

  • нет аргументов впоследствии
  • все аргументы следующие должны также иметь значение по умолчанию

Чтобы обойти это сделать ваш Occup последней переменной в вашем consructor.

HotelRoom::HotelRoom (string room, int cap, double rt, int occup=0) 

Еще одно замечание:

только обеспечивают значение по умолчанию в вашем заголовке, переписывание значение по умолчанию будет выдавать ошибку при объявлении.

header.h

HotelRoom(string,int,double,int occup=0); 

imp.cpp

HotelRoom::HotelRoom (string room, int cap, double rt, int occup) 
{ 
    //... 
} 
1

AFAIR, параметры со значениями по умолчанию не может сопровождаться параметрами без. В вашем случае вы должны иметь скорость, предшествующую заполнению последней, которая может иметь значение по умолчанию, а первое не может.

2

В дополнение к ответу Gmercer015. В C++ 11 вы можете использовать delegating constructors.

HotelRoom::HotelRoom (string room, int cap, int occup, double rt) 
{ 
    ... 
} 

HotelRoom::HotelRoom (string room, int cap, double rt) 
    : HotelRoom(room, cap, 0, rt) 
{} 
Смежные вопросы