0

我知道还有其他一些类似的帖子,但是我已经在这个错误上一个多小时了,无法弄清楚。这是给麻烦的代码

istream& operator>>(istream& in, UndirectedGraph& g)
{
    int numVerticies;
    in >> numVerticies;
    g = UndirectedGraph(numVerticies);

    for(int i = 0; i < numVerticies; i++)
    {
        int temp;
        in >> temp;
        if(temp != i)
        {
            g.linkedAdjacencyList[i]->value = temp;
        }
    }

    int edges;
    in >> edges;
    g.edges = edges;
    for(int i = 0; i < edges; i++)
    {
        int first;
        int second;
        in >> first >> second;
        addEdge(first, second);
    }
    return in;
}

ostream& operator<<(ostream& out, UndirectedGraph& g)
{
    out << g.numVerticies << endl;

    for(int i = 0; i < g.numVerticies; i++)
    {
        out << g.linkedAdjacencyList[i] << " ";
    }
    out << endl;

    out << g.edges << endl;

    for(int i = 0; i < g.numVerticies; i++)
    {
        out << linkedAdjacencyList[i]->value;
        Node* whereto;
        whereto = linkedAdjacencyList[i]->adj;
        while(whereto->adj != NULL)
        {
            out << " " << whereto->value;
            whereto->adj = whereto->adj->adj;
        }
    }
    return out;
}

int main()
{

    ifstream inFile;
    inFile.open("hw8.in");

    UndirectedGraph graph;
    inFile >> graph;

...

在这里,错误出现在第 1 行和第 28 行,其中 istream 和 ostream 重载。

谢谢你的帮助!

4

4 回答 4

2

这:

void UndirectedGraph::istream& operator>>(istream& in, UndirectedGraph g)

没有意义!你可能想要:

istream& operator>>(istream& in, UndirectedGraph g)

话虽如此,您似乎没有在函数定义中返回任何内容。

于 2011-04-12T13:12:28.313 回答
1
void UndirectedGraph::istream& operator>>(istream& in, UndirectedGraph g)

这里有两种返回类型:voidUndirectedGraph::istream&. 一个人需要去。另一种方法也是如此。

此外,我假设您的意思是std::istream,不是UndirectedGraph::istream,对吧?

最后,要使此代码正常工作,您需要g 通过引用传递参数,否则您将无法更改它。

这给我们留下了:

std::istream& operator>>(std::istream& in, UndirectedGraph& g)
于 2011-04-12T13:12:22.987 回答
0

似乎有几个问题。首先,插入和提取运算符是成员方法还是只是辅助函数?对于后者,签名将类似于

istream & operator>>(istream& in, UndirectedGraph &g)

对于前者

istream &UndirectedGraph::operator>>(istream& in, UndirectedGraph &g)

无论哪种情况,如上图所示,您都应该将UndirectedGraph参数设置为引用参数。否则,您只是按值传递参数,这可能不是您想要的。

于 2011-04-12T13:45:00.823 回答
0

有点重申@don-wakefield 所说的话。我认为您希望您的运营商分别返回 std::istream& 和 std::ostream& (而不是 UndirectedGraph::istream 和 UndirectedGraph::ostream)。

所以签名看起来像:

std::istream& UndirectedGraph::operator>>(istream& in, UndirectedGraph g)
std::ostream& UndirectedGraph::operator<<(ostream& out, UndirectedGraph& g)
于 2011-04-12T14:00:24.913 回答