Question

Salut tout ce que je suit dans une fonction membre

int tt = 6; 
vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt]; 
set<int>& egressCandidateStops = temp.at(dest);

et la déclaration suivante d'une variable membre

map<int, vector<set<int>>> m_egressCandidatesByDestAndOtMode;

Cependant, je reçois une erreur lors de la compilation (compilateur Intel 11.0)

1>C:\projects\svn\bdk\Source\ZenithAssignment\src\Iteration\PtBranchAndBoundIterationOriginRunner.cpp(85): error: no operator "[]" matches these operands
1>            operand types are: const std::map<int, std::vector<std::set<int, std::less<int>, std::allocator<int>>, std::allocator<std::set<int, std::less<int>, std::allocator<int>>>>, std::less<int>, std::allocator<std::pair<const int, std::vector<std::set<int, std::less<int>, std::allocator<int>>, std::allocator<std::set<int, std::less<int>, std::allocator<int>>>>>>> [ const int ]
1>          vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt]; 
1>                                                                    ^

Je sais que ça doit être quelque chose de stupide, mais je ne peux pas voir ce que j'ai mal fait.

UPDATE J'appelle cela d'une fonction membre const qui est la raison pour laquelle le type de variable membre est const donc je pensais que quelque chose comme ce qui suit devrait fixer:

int dest = 0, tt = 6; 
const set<int>& egressCandidateStops = m_egressCandidatesByDestAndOtMode[tt].at(dest); 

Mais pas de dés ... toujours la même erreur.

Était-ce utile?

La solution

  

types opérandes sont: const std :: carte

map::operator[] ne fonctionne pas avec un const map.

répondu il y a quelques jours.

  

carte :: operator [] est un peu bizarre. Il   fait ceci:

     
      
  1. Recherchez la clé.
  2.   
  3. Si trouvé, retournez-le.
  4.   
  5. Dans le cas contraire, l'insérer et par défaut, construire son associé   valeur.
  6.   
  7. Revenez ensuite une référence à la nouvelle valeur.
  8.   
     

L'étape 3 est incompatible avec constness.   Plutôt que d'avoir deux   opérateur différent fonctionnement []   Surcharges, les forces linguistiques vous à   carte d'utilisation :: trouver des objets const.

Autres conseils

Le prototype de [] est

 data_type& operator[](const key_type& k)

i.e.. une opération non const, de sorte que vous ne pouvez pas l'appeler sur un membre d'une fonction membre const.

Vous pouvez changer le code:

std::map<...>::const_iterator where = m_egressCandidatesByDestAndOtMode.find(tt);
if (egressCandidatesByDestAndOtMode.end() != where) {
    const vector<set<int>>& temp = where->second;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top