【发布时间】:2014-05-13 17:16:44
【问题描述】:
所以,我正在处理一个流程图项目(OOP),我需要为 GUI 实现一个条件以让用户 DrawConnector,但“连接器”的条件是只有当你有 2 个时才能绘制其他“形状”(钻石/矩形/等)。
所以这是连接器类.h
class Connector
{
protected :
Point start;
Point end;
Statement *St;
bool DrawCondition;
bool DelCondition;
public :
Connector();
virtual void setStart(Point S); //Not a condition to be virtuals
virtual void setEnd(Point E);
virtual void DrawConnector(Output* pOut);
//virtual bool setDrawCondition ();
friend bool operator == (Point P, Point T);
};
我实际上想在运行时通过鼠标“点击”的值“setStart”和“setEnd”,然后检查这些点是否在一个形状上,所以它绘制连接器,如果不是,然后什么都没有发生。
void Connector::setStart(Point S)
{
if (S == St->getPoint())
{start = S;}
else return;
}
void Connector::DrawConnector(Output *pOut)
{
/*if (DrawCondition == true)*/
pOut->DrawConnector(start.x,start.y,end.x,end.y);
}
您会注意到我重载了运算符“==”以检查是否已读取这些点...但它最终给了我这个编译错误!
错误 3 错误 LNK2019:未解析的外部符号“bool __cdecl operator==(struct Point,struct Point)”(??8@YA_NUPoint@@0@Z) 在函数“public: virtual void __thiscall Connector::setStart”中引用(结构点)" (?setStart@Connector@@UAEXUPoint@@@Z) C:\Users\Cereal Killer\Downloads\Phase1-Code\Phase1-Code\Connector.obj
编辑
对不起各位,我忘了说我已经在另一个文件中定义了重载,但我想这是问题所在,但为什么不是“全局函数”?
这是定义。 :
bool operator == (Point P, Point T)
{
if ( (P.x == T.x) && (P.y == T.y) )
return true;
else return false;
}
还有一件事,如果我想从 GUI 形状“DrawRectangle、DrawCircle 等”检查给定的 POINT 是否在形状上。我怎样才能“追踪绘制形状的点”?还是有别的办法?
【问题讨论】:
-
您对
==的实际定义是什么样的? -
运算符 == 的定义在哪里?
标签: c++ operator-overloading operator-keyword