1

クラスをオーバーロードしようとしてoperator<<いますGraphが、さまざまなエラーが発生し続けます。

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

クラス定義operator<<のすぐ上にプロトタイプを配置しました。の定義はファイルの一番下にあります。エラーはヘッダー ガードと関係がありますか?Graphoperator<<

ここにあり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;
}
4

1 に答える 1

0

の宣言に の宣言がoperator<<ありませんGraph。1 つの解決策は、宣言の前にクラスを宣言することoperator<<です。

template <class VertexType>
class Graph;

または、宣言は の非メンバー宣言も構成するためoperator<<、クラス外の宣言を完全に省略できます。friendoperator<<

于 2013-05-05T06:27:51.507 に答える