I am not sure if I am doing the overload correctly.
...\point.h(42) : error C2061: syntax error : identifier 'Vec3' Point operator +(Vec3 a) const;
Here is my .h file:
#include <fstream>
#include <iostream>
#include "vec3.h"
using std::ofstream;
using std::ifstream;
using std::cout;
using std::cin;
using std::endl;
using namespace std;
#ifndef POINT_H
#define POINT_H
//Define ourselves a basic 2D point class
class Point
{
friend ofstream& operator <<(ofstream& output, const Point& p);
friend ifstream& operator >>(ifstream& input, Point& p);
\
public:
Point();
Point(double _x, double _y);
Point(double _x, double _y, double _z);
double x,y,z;
//Operators
Point operator -(Point a) const;
Point operator /(double s) const;
Point operator *(double s) const;
// Used to do vector point addition
Point operator +(Vec3 a) const;
};
#endif
Here is my .cpp file
#include "point.h"
Point::Point(double _x, double _y, double _z)
{
x= _x;
y= _y;
z= _z;
}
Point :: Point()
{
x = 0.0;
y = 0.0;
z = 0.0;
}
Point::Point(double _x, double _y)
{
x= _x;
y= _y;
z= 0;
}
Point Point::operator -(Point a) const
{
return Point(x-a.x, y-a.y, z-a.z);
}
Point Point::operator /(double s) const
{
return Point(x/s, y/s, z/s);
}
Point Point::operator *(double s) const
{
return Point(x*s, y*s, z*s);
}
// Vector Point Addition
Point Point::operator +(Vec3 a) const
{
return Point(x+a.x, y+a.y, z+a.z);
}
ofstream& operator <<(ofstream& output, const Point& p)
{
output << p.x << " " << p.y << " " << p.z << "\n";
return output;
}
ifstream& operator >>(ifstream& input, Point& p)
{
input >> p.x >> p.y >> p.z;
return input;
}
Here is the Vec3.h
#ifndef VEC3_H
#define VEC3_H
#include "point.h"
class Vec3
{
friend ofstream& operator <<(ofstream& output, const Vec3& p);
friend ifstream& operator >>(ifstream& input, Vec3& p);
public:
Vec3();
Vec3(double _x, double _y);
Vec3(double _x, double _y, double _z);
double x,y,z;
//Operators
Vec3 operator -(Vec3 a) const;
Vec3 operator /(double s) const;
Vec3 operator *(double s) const;
// Used to do vector Vec3 addition
Vec3 operator +(Vec3 a) const;
Point operator +(Point a) const;
};
#endif
vec3orVec3something lik dat.. Compiler clearly tells it can't identifyVec3...usingdeclarations in header files, because then anybody who includes your header file gets thoseusingdeclarations whether they want them or not. Instead, use fully qualified names in your header file (std::ofstreaminstead of justofstream).