0

このような投稿が他にもいくつかあることは知っていますが、この 1 つのエラーに 1 時間以上悩まされていて、理解できません。これが問題を引き起こしているコードです

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)

ここには との 2 つの戻り型がvoidありUndirectedGraph::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 に答える