tipos - sobrecarga de operadores unarios en c++
binario ''['': no se encontró ningún operador que tome un operando de la izquierda del tipo ''const std:: map<_Kty,_Ty>'' (2)
Si bien no es el caso anterior, ocurrirá el mismo problema si utiliza el operador [] en una función const.
No sé de dónde viene el error. Parece que estoy pasando datos válidos al operador [].
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
El error:
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> ]
Y la clase de 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
operator[]
solo se puede llamar en un mapa no const
.
Si la clave no existe, se insertará con un valor construido predeterminado.
Para obtener un iterador de const, use map::find
.