运行代码的时候出现LNK2005错误operator==()已经在其中一个被定义

#ifndef POSTYPE_H
#define POSTYPE_H
struct PosType
{
    int row, col;
};
PosType operator+(const PosType p1, const PosType p2) {
    PosType p;
    p.row = p1.row + p2.row;
    p.col = p1.col + p2.col;
    return p;
}
bool operator== (const PosType p1, const PosType p2) {
    return p1.row == p2.row && p1.col == p2.col;
}
#endif

出问题的代码在这个头文件中定义,因为要使用所以在另一个头文件MAZE.H中包含了该头文件,
运行程序的时候,在main中包含了MAZE.H的头文件,运行后提示错误:
LNK2005 "bool __cdecl operator==(struct PosType,struct PosType)" (??8@YA_NUPosType@@0@Z) 已经在 Maze.obj 中定义 Stageone F:\workspace\Stageone\源.obj
LNK2005 "struct PosType __cdecl operator+(struct PosType,struct PosType)" (??H@YA?AUPosType@@U0@0@Z) 已经在 Maze.obj 中定义 Stageone F:\workspace\Stageone\源.obj

请大大们帮忙看看要怎么修改?

运算符的重载要么作为类的成员方法,要么做成友元函数。你这里既不是成员方法,也不是友元函数。
代码修改如下:

#ifndef POSTYPE_H
#define POSTYPE_H
struct PosType
{
    int row, col;

    PosType operator+(const PosType p1, const PosType p2) {
        PosType p;
        p.row = p1.row + p2.row;
        p.col = p1.col + p2.col;
        return p;
    }
    bool operator== (const PosType p1, const PosType p2) {
        return p1.row == p2.row && p1.col == p2.col;
    }
};

#endif

或者:

#ifndef POSTYPE_H
#define POSTYPE_H
struct PosType
{
    int row, col;

    PosType operator+(const PosType p1, const PosType p2) {
        PosType p;
        p.row = p1.row + p2.row;
        p.col = p1.col + p2.col;
        return p;
    }
    bool operator== (const PosType p1) {
        return p1.row ==row && p1.col == col;
    }
};

#endif

你有好几个头文件中重载了==操作符吗?