linux — ошибка компиляции кода C ++

Я пытаюсь скомпилировать образец кода C ++ из шаблона моста, как уже упоминалось Вот

но я получаю ошибки компиляции, когда я делаю g++ -o Bridge Bridge.C

Программа:

#include <iostream>
#include <iomanip>
#include <string>

class TimeImp {
public:
TimeImp(int hr, int min) {
hr_ = hr;
min_ = min;
}
virtual void tell() {
cout << "time is " << setw(2) << setfill(48) << hr_ << min_ << endl; //error
}
protected:
int hr_, min_;
};

class CivilianTimeImp: public TimeImp {
public:
CivilianTimeImp(int hr, int min, int pm): TimeImp(hr, min) {
if (pm)
strcpy(whichM_, " PM");
else
strcpy(whichM_, " AM");
}

/* virtual */
void tell() {
cout << "time is " << hr_ << ":" << min_ << whichM_ << endl;
}
protected:
char whichM_[4];
};

class ZuluTimeImp: public TimeImp {
public:
ZuluTimeImp(int hr, int min, int zone): TimeImp(hr, min) {
if (zone == 5)
strcpy(zone_, " Eastern Standard Time");
else if (zone == 6)
strcpy(zone_, " Central Standard Time");
}

/* virtual */
void tell() {
cout << "time is " << setw(2) << setfill(48) << hr_ << min_ << zone_ << endl; //error
}
protected:
char zone_[30];
};

class Time {
public:
Time(){}
Time(int hr, int min) {
imp_ = new TimeImp(hr, min);
}
virtual void tell() {
imp_->tell();
}
protected:
TimeImp *imp_;
};

class CivilianTime: public Time {
public:
CivilianTime(int hr, int min, int pm) {
imp_ = new CivilianTimeImp(hr, min, pm);
}
};

class ZuluTime: public Time {
public:
ZuluTime(int hr, int min, int zone) {
imp_ = new ZuluTimeImp(hr, min, zone);
}
};

int main() {
Time *times[3];
times[0] = new Time(14, 30);
times[1] = new CivilianTime(2, 30, 1);
times[2] = new ZuluTime(14, 30, 6);
for (int i = 0; i < 3; i++)
times[i]->tell();
}

Ошибка:

] # g ++ -o Bridge Bridge.C Bridge.C: в функции-члене ‘virtual void
TimeImp :: tell () ’: Bridge.C: 14: ошибка: нет совпадения для оператора‘<<‘ в
«Станд :: оператор<< [с _CharT = char, _Traits =
std :: char_traits] (((std :: basic_ostream>&) ((std :: basic_ostream>) Станд :: оператор<< [с _Traits =
std :: char_traits] (((std :: basic_ostream>&) (& std :: cout)), ((const char
)»время
«)))), std :: setw (2)) << std :: setfill с _CharT = int ’
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:67: примечание: кандидаты: станд :: basic_ostream<_CharT, _Traits>&
станд :: basic_ostream<_Диаграмма,
_Traits> :: оператор<<(Станд :: basic_ostream<_CharT, _Traits>& () (Станд :: basic_ostream<_CharT, _Traits>&)) [с _CharT = char,
_Traits = std :: char_traits] /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc: 78: примечание: std :: basic_ostream<_CharT, _Traits>&
станд :: basic_ostream<_CharT, _Traits> :: оператор<<(СТД :: basic_ios<_Диаграмма,
_Traits>& (
) (СТД :: basic_ios<_CharT, _Traits>&)) [с _CharT = char, _Traits = std :: char_traits] /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1. 2 / bits / ostream.tcc: 90: note: std :: basic_ostream<_CharT, _Traits>&
станд :: basic_ostream<_CharT, _Traits> :: оператор<<(Станд :: ios_base&
(*) (Станд :: ios_base&)) [с _CharT = char, _Traits =
СТД :: char_traits]

Это часть ошибки, она распространяется по тому же шаблону.

Я скопировал и вставил тот же код, проанализировал строки ошибок, но не смог их получить.

Может кто-нибудь сказать мне, где я иду не так?

1

Решение

std::setfill занимает char, Вы передаете это int,

Пытаться:

cout << "time is " << setw(2) << setfill(' ') << hr_ << min_ << endl;
4

Другие решения


По вопросам рекламы [email protected]