Необъяснимая ошибка C ++: ошибка: ожидаемый инициализатор перед маркером '&' - PullRequest
0 голосов
/ 12 апреля 2011

я знаю, что есть еще несколько подобных сообщений, но я уже более часа нахожусь на этой единственной ошибке и не могу понять это.вот код, который доставляет проблемы

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 ]

2 голосов
/ 12 апреля 2011

Это:

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

не имеет смысла! Вы, вероятно, хотите:

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

Сказав это, вы, похоже, ничего не возвращаете в своем определении функции.

1 голос
/ 12 апреля 2011
void UndirectedGraph::istream& operator>>(istream& in, UndirectedGraph g)

Здесь есть два типа возврата: void и UndirectedGraph::istream&.Нужно идти.То же самое относится и к другому методу.

Кроме того, я предполагаю, что вы имеете в виду std::istream, а не UndirectedGraph::istream, верно?

И, наконец, чтобы этот код работал, вам нужно передатьаргумент g по ссылке , иначе вы не сможете его изменить.

Что оставляет нас с:

std::istream& operator>>(std::istream& in, UndirectedGraph& g)
0 голосов
/ 12 апреля 2011

Вид повторения того, что сказал @ 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)
0 голосов
/ 12 апреля 2011

Кажется, есть пара проблем. Во-первых, являются ли методы-члены операторов вставки и извлечения просто вспомогательными функциями? Для последнего подпись будет что-то вроде

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

Для бывших

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

В любом случае, как показано выше, вы должны сделать параметр UndirectedGraph ссылочным аргументом. В противном случае вы просто передаете параметр по значению, что, вероятно, не то, что вам нужно.

...