C++无法解释的错误:错误:令牌之前的预期初始值设定项'&'

C++ error unexplained: error: expected initializer before '&' token

本文关键字:错误 令牌 无法解释 C++      更新时间:2023-10-16

我知道有一些其他的帖子像这样,但我已经在这个单一的错误一个多小时了,现在不能弄清楚。这是产生问题的代码

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重载。

谢谢你的帮助!

This:

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

没有意义!您可能需要:

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

话虽如此,你似乎没有在你的函数定义返回任何东西。

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

这里有两个返回类型:voidUndirectedGraph::istream&。一个人需要离开。其他方法也是一样。

此外,我假设你指的是std::istream,而不是UndirectedGraph::istream,对吗?

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

剩下的是:

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

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

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

对于前者

istream &UndirectedGraph::operator>>(istream& in, UndirectedGraph &g)
在任何一种情况下,如上面所示,您都应该将UndirectedGraph形参作为引用实参。否则,您只是按值传递参数,这可能不是您想要的。

这是在重复don-wakefield说过的话。我想你希望你的操作符返回std::istream&和std:: ostream&

UndirectedGraph::istream

所以签名是这样的:

std::istream& UndirectedGraph::operator>>(istream& in, UndirectedGraph g)
std::ostream& UndirectedGraph::operator<<(ostream& out, UndirectedGraph& g)