15
Nie wiem, skąd pochodzi błąd. Wygląda na to, że przekazuję prawidłowe dane do operatora [].binarny "[": nie znaleziono operatora, który bierze lewy operand typu "const std :: map <_Kty,_Ty> '
template <class VertexType>
typename map< Vertex<VertexType>, int >::iterator Graph<VertexType>::findEdge(const VertexType& v, const VertexType& w) const
{
map<Vertex<VertexType>, int>::const_iterator iter = vertices[v].second.adjList.find(w);
return iter;
} // end findEdge
Błąd:
error C2678: binary '[' : no operator found which takes a left-hand operand of type 'const std::map<_Kty,_Ty>' (or there is no acceptable conversion)
1> with
1> [
1> _Kty=unsigned int,
1> _Ty=Vertex<unsigned int>
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\map(164): could be 'Vertex<VertexType> &std::map<_Kty,_Ty>::operator [](unsigned int &&)'
1> with
1> [
1> VertexType=unsigned int,
1> _Kty=unsigned int,
1> _Ty=Vertex<unsigned int>
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\map(209): or 'Vertex<VertexType> &std::map<_Kty,_Ty>::operator [](const unsigned int &)'
1> with
1> [
1> VertexType=unsigned int,
1> _Kty=unsigned int,
1> _Ty=Vertex<unsigned int>
1> ]
1> while trying to match the argument list '(const std::map<_Kty,_Ty>, const unsigned int)'
1> with
1> [
1> _Kty=unsigned int,
1> _Ty=Vertex<unsigned int>
1> ]
1> c:\users\user\desktop\cs m20a\topic g project 2\topic g project 2\graph.h(146) : while compiling class template member function 'std::_Tree_iterator<_Mytree> Graph<VertexType>::findEdge(const VertexType &,const VertexType &) const'
1> with
1> [
1> _Mytree=std::_Tree_val<std::_Tmap_traits<Vertex<unsigned int>,int,std::less<Vertex<unsigned int>>,std::allocator<std::pair<const Vertex<unsigned int>,int>>,false>>,
1> VertexType=unsigned int
1> ]
1> c:\users\user\desktop\cs m20a\topic g project 2\topic g project 2\graph.h(52) : while compiling class template member function 'Graph<VertexType>::Graph(unsigned int)'
1> with
1> [
1> VertexType=unsigned int
1> ]
1> c:\users\user\desktop\cs m20a\topic g project 2\topic g project 2\topicg.cpp(17) : see reference to class template instantiation 'Graph<VertexType>' being compiled
1> with
1> [
1> VertexType=unsigned int
1> ]
I klasa Graph
:
template <class VertexType>
class Graph
{
private:
// list of all vertices in the graph. assumes non-duplicate data.
map< VertexType, Vertex<VertexType> > vertices;
const unsigned MAX_VERTICES; // Maximum number of vertices the graph can hold.
unsigned numVertices; /** Current number of vertices in the graph. */
unsigned numEdges; /** Number of edges in the graph. */
typename map< Vertex<VertexType>, int >::iterator findEdge(const VertexType& v, const VertexType& w) const;
public:
Graph(unsigned max);
unsigned getNumVertices() const;
unsigned getMaxNumVertices() const;
unsigned getNumEdges() const;
int getWeight(const VertexType& v, const VertexType& w) const;
Graph<VertexType>& addVertex(const VertexType& newValue);
Graph<VertexType>& addEdge(const VertexType& v, const VertexType& w, int weight);
void removeEdge(const VertexType& v, const VertexType& w);
void BFS(const VertexType& v) const;
void display() const;
}; // end Graph
Inną opcją jest 'std :: map :: at' – PlasmaHH
@PlasmaHH Tak, [' std :: map :: at'] (http://en.cppreference.com/w/cpp/container/map/at) ma inną semantykę, ponieważ generuje wyjątek, jeśli element nie istnieje. –
Brzmi jak rażące zaniedbanie dla mnie –