Я думаю, это вопрос n00b, потому что я не мог найти ничего об этом в Интернете...
Вот класс Point:
class Point {
public:
Point();
Point(double x, double y);
double getX() const;
double getY() const;
void setX(double);
void setY(double);
friend std::ostream& operator<<(std::ostream& os, const Point& obj);
private:
double x;
double y;
};
И вот реализация функции оператора <<:
inline std::ostream& operator<<(std::ostream& os, const Point& obj) {
os << "(" << obj.getX() << "," << obj.getY() << ")";
return os;
}
Теперь в основной функции у меня есть Point *p;
... Как распечатать его с помощью std::cout
?
Итак, я, наконец, узнал, в чем проблема.
Хотя все учебники, книги и даже c++ ссылки согласны с тем, что inline
директива может быть проигнорирована компилятором, выясняется, что когда я удаляю inline
ключевое слово из реализации перегруженной функции, все работает.
Вам нужно разыменовать свой указатель, но поскольку указатели могут быть нулевыми, сначала проверьте.
if( p != nullptr )
std::cout << *p << std::endl;
или даже просто
if( p )
std::cout << *p << std::endl;
И теперь, идите и прочитайте это в нашей вики сообщества, надеюсь, он предоставит вам ответы.
Каковы различия между переменной указателя и ссылочной переменной в C++?
-
до nullptr
?
*p
cout << *p << endl