单独的类声明和方法定义文件问题

Separate class declaration and method definition files problem

本文关键字:定义 文件 问题 方法 声明 单独      更新时间:2023-10-16

我正在尝试为我的项目使用单独的文件,包括声明类方法的头文件和用于定义方法.cpp文件。

但是,强制执行隐藏方法实现时,我遇到错误并且无法编译代码。

文件向量.h

#ifndef VECTOR_H
#define VECTOR_H

#include <iostream>
class Point
{
private:
float x;
float y;
public:
Point(float x, float y);
float get_x() const;
float get_y() const;
};
#endif // VECTOR_H

文件矢量.cpp

#include "vector.h"
Point::Point(float x, float y): x(x), y(y) {}
float Point::get_x() const
{
return x;
}
float Point::get_y() const
{
return y;
}
Point operator+(Point& pt1, Point& pt2)
{
return {pt1.get_x() + pt2.get_x(), pt1.get_y() + pt2.get_y()};
}
std::ostream& operator<<(std::ostream& os, const Point& pt)
{
os << '(' << pt.get_x() << ', ' << pt.get_y() << ')';
return os;
}

文件来源.cpp

#include "vector.h"
int main()
{
Point p1(1.4, 2.324), p2(2.004, -4.2345);
std::cout << p1 << 'n';
std::cout << p2 << 'n';
std::cout << p1 + p2 << 'n';
return 0;
}

最后我得到:

error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'Point')
error: no match for 'operator+' (operand types are 'Point' and 'Point')

你有一个编译错误,因为你的主要对operator+operator<<一无所知。

Point operator+(Point& pt1, Point& pt2);
std::ostream& operator<<(std::ostream& os, const Point& pt);

h文件中或转发声明它们 在main文件中。

还有一件事。您应该在<< ", " <<中使用 "。