首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >桥接模式C++代码编译错误

桥接模式C++代码编译错误
EN

Stack Overflow用户
提问于 2014-06-30 13:19:50
回答 1查看 288关注 0票数 1

我正在尝试编译一个桥接模式C++示例代码,如前面提到的这里

但是当我执行g++ -o Bridge Bridge.C时,我会得到编译错误

计划:

代码语言:javascript
复制
#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桥桥C桥C:在成员函数‘virtual::tell():Bridge.C:14:错误:_CharT = char中的“operator<<”不匹配,_Traits =std::char_traits(std::basic_ostream >&)((std::basic_ostream >)std::operator<< with _Traits =std::char_traits)((std::basic_ostream >&)(& std:cout)),(Const char)"time is“),std::setw(2) << std::<< _CharT =int‘_CharT注释:候选人是: std::basic_ostream<_CharT,_Traits>& std::basic_ostream<_CharT,_Traits>::operator<<(std::basic_ostream<_CharT,_Traits>& ()(std::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>& std::basic_ostream<_CharT,_Traits>::operator<<(std::basic_ios<_CharT,_Traits>& ()(std::basic_ios<_CharT,_Traits>&))和_CharT = char/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:90:注释: std::basic_ostream<_CharT,_Traits>& std::basic_ostream<_CharT,_Traits>::operator<<(std::ios_base& (*)(std::ios_base&))与_CharT = char,_Traits = std::char_traits

这是错误的一部分,它以相同的模式扩展。

我复制了粘贴相同的代码,分析了错误行,但无法得到它。

谁能告诉我我哪里出错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-30 13:34:25

std::setfill char,您正在传递一个int

尝试:

代码语言:javascript
复制
cout << "time is " << setw(2) << setfill(' ') << hr_ << min_ << endl;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24491092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档