0

我已经为我的类图将运算符重载为“-”。它的使用并不完全直观(糟糕的编码 - 我知道)但如果我这样做 graph3 = graph2-graph1 那么图 3 应该只接收图 2 和图 1 中的那些顶点。

所以,我已经编写了代码,当我运行调试器时,操作函数似乎创建了一个新的“图”来返回,并将适当的顶点添加到新图,然后调试器似乎退出了操作函数,但永远不会让它回到主。就好像它在等我输入什么一样。不会出现错误消息。

这是代码:

char stringy[100];
//cin>>stringy;
strcpy(stringy,"|12,34,25,2,3,2|(3->2),(2->1),(5->9),(2->1)|");
char* param= new char[sizeof(stringy)];
strcpy(param,stringy);
Graph graph1(param);

 char sstring[20] = "|33,34,11|(2->33)|";
Graph graph2(sstring);
cout<<graph2.outSumm()<<endl;

Graph graph3;
//until here everything works fine
graph3= graph1-graph2; //the debugger does this and then 

cout<<graph3.outSumm()<<endl;

操作员功能:

Graph Graph::operator- (const Graph& g2) const
{
Graph created;

//goes through "this" list and if value exists in g2 copies it to created
for(int i=0;i<vertList.getSize();i++)
{
 if (g2.vertList.find(vertList.read(i))!=999)
 created.addVertex(vertList.read(i).getInt());
}

return created;
}

我正在使用代码块。

复制构造函数:

Graph(const Graph& g2):      
maxVal(g2.maxVal),vertList(g2.vertList),edgeList(g2.edgeList){} ;

赋值运算符:

void Graph::operator= (const Graph& g2)
{
 if (this==&g2)
 {
 cout<<"not the greatest idea"<<endl;
 return;
 }

 vertList.delete_List();
 edgeList.delete_List();
 maxVal=0;

addValues(g2.outSumm());
}
4

3 回答 3

2

听起来您的代码处于无限循环中。当程序似乎停止时,您是否尝试过中断调试器?

您是否在 Graph 类中定义了复制构造函数?您需要它才能使用局部created变量成功返回值。

于 2009-05-07T17:48:38.357 回答
2

与您的问题没有特别相关(尽管可能),您为什么不使用 std::string?如果你必须使用字符数组,为什么不:

char stringy[100] = "|12,34,25,2,3,2|(3->2),(2->1),(5->9),(2->1)|";
Graph graph1( stringy );

甚至:

Graph graph1( "|12,34,25,2,3,2|(3->2),(2->1),(5->9),(2->1)|" );

或者您是否将传递给类中构造函数的指针存储?如果是这样,那是个坏主意,我对使用 std::strings 的建议加倍。

于 2009-05-07T17:40:45.130 回答
0

而不是实现 operator-,而是实现 operator-=:

Graph& Graph::operator-=(const Graph& rhs)
{
    // remove nodes not in both Graphs

    return *this;
}

然后就这样实现 operator- :

Graph Graph::operator-(const Graph& rhs)
{
    Graph temp(*this);
    temp -= rhs;
    return temp;
}

看看这是否有效。

于 2009-05-07T18:21:37.370 回答