重载的流插入操作符错误,将无法编译

时间:2013-05-05 06:24:53

标签: c++ operator-overloading

我正在尝试为operator<<课程重载Graph,但我一直遇到各种错误:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2143: syntax error : missing ',' before '<'

我将operator<<的原型放在Graph类定义的正上方。 operator<<的定义位于文件的最底部。这些错误是否与标题保护有关?

这是Graph.h

#ifndef GRAPH
#define GRAPH

#include <iostream>
#include <vector>
#include <map>
#include <sstream>
#include "GraphException.h"
#include "Edge.h"

using namespace std;

template <class VertexType>
ostream& operator<<( ostream& out, const Graph<VertexType>& graph );

/** An adjacency list representation of an undirected,
 * weighted graph. */

template <class VertexType>
class Graph
{
    friend ostream& operator<<( ostream& out, const Graph& graph );
   // stuff

}  


template <class VertexType>
ostream& operator<<( ostream& out, const Graph<VertexType>& graph )
{
    return out;
}

#endif GRAPH

这里是main

#include <iostream>
#include "Graph.h"

using namespace std;

const unsigned MAX_NUM_VERTICES = 9;

int main()
{
    // create int graph:

Graph<int> iGraph( MAX_NUM_VERTICES );

    // add vertices and edges

    cout << iGraph;


    return 0;
}

1 个答案:

答案 0 :(得分:0)

operator<<的声明缺少Graph的声明。一种解决方案是在operator<<声明之前声明类:

template <class VertexType>
class Graph;

或者你可以完全省略课堂外operator<<的声明,因为friend声明也构成operator<<的非成员声明。