Проблема компиляции C ++ по наследованию классов - PullRequest
0 голосов
/ 10 марта 2019

Поскольку я довольно новичок в наследстве, у меня возникла ошибка компиляции, которую я не знаю, как исправить.Мне некуда идти, и поэтому я прихожу сюда.Мой оператор присваивания '=' также неверен, просто у меня нет ошибки усложнения, чтобы показать.Я был бы очень признателен, если бы кто-нибудь мог мне помочь.Спасибо!

Ошибка компиляции:

 main.cpp: In function ‘std::ostream& operator<<(std::ostream&, Line&)’:

 main.cpp:56:17: error: no match for ‘operator<<’ (operand types are 

 ‘std::basic_ostream<char>’ and ‘Point’)
 stream << "(" << p.p1 << ", " << p.p2 << ")" << endl;
 ~~~~~~~~~~~~~~^~~~~~~

 In file included from /usr/lib/gcc/x86_64-pc- 
 cygwin/7.4.0/include/c++/iostream:39:0,
             from main.cpp:1:
 /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/include/c++/ostream:108:7: note: 
 candidate: std::basic_ostream<_CharT, _Traits>::__ostream_type& 
 std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, 
 _Traits>::__ostream_type& (*)(std::basic_ostream<_CharT, 
 _Traits>::__ostream_type&)) [with _CharT = char; _Traits = 
 std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type 
 = std::basic_ostream<char>]
   operator<<(__ostream_type& (*__pf)(__ostream_type&))
   ^~~~~~~~

Main.cpp

class Point
{
private:
    int x, y;
public:
    Point() : x(0), y(0) {}
    Point(int x, int y) : x(x), y(y) {}


};

class Linee : public Point 
{ 
 private:
    Point p1;
    Point p2;
public:
    Line(const Point & p1, const Point & p2 ) : p1(p1), p2(p2) {}

    friend ostream &operator<<(ostream &stream, Line &p);
    Line& operator = (const Line &a);       
    void Draw();

};

ostream &operator<<(ostream &stream, Line &p) {
    stream << "(" << p.p1 << ", " << p.p2 << ")" << endl;
    return stream;
}

Line& operator = (const Line &a)
{
    p1 = a.p1;
    p2 = a.p2;
    return *this;
}
    void Line::Draw() {
cout << "Line" << "drawing" << endl;
}

int main() 
{
Line l1;                //Output: Line construction
std::cout << l1;        //Output: Line (0,0) (0,0)
l1.Draw();              //Output: Line drawing

Line l2(Point(), 
Point(100,100));    //Output: Line construction
std::cout << l2;        //Output: Line (0,0) (100,100)
l1 = l2;
std::cout << l1;        //Output: Line (0,0) (100,100)
}

1 Ответ

0 голосов
/ 10 марта 2019
stream << "(" << p.p1 << ", " << p.p2 << ")" << endl;

Поскольку p.p1 и p.p2 относятся к типу Point, этот код может работать, только если Point реализует соответствующий operator<<. Это явно не так.

Попробуйте указать (хе-хе) код, который печатает x или y координаты Point. Вы не можете сделать это, потому что нет такого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...