Proszę wyjaśnić, dlaczego poniższy kod nie został skompilowany za pomocą clang 3.5.Niepowodzenie kompilacji związane z wektorem const std :: string
Zgłoszono błąd "Nie da się przeładować" = "w algorytmie".
std::vector<const std::string> m_messages;
std::vector<const std::string>::iterator iter;
...
if (iter != m_messages.end())
{
m_messages.erase(iter); // compilation error
}
Jeśli oświadczam m_messages
jak: std::vector<std::string> m_messages;
następnie kompiluje OK.
Również jaka jest różnica pomiędzy:
std::vector<const std::string> m_messages;
i
std::vector<std::string> m_messages;
TIA.
Czy to znaczy, że nie ma sensu mieć wektor const ciągi znaków, jeśli elementy można usunąć? – ksl
Nie jestem do końca pewien, czy jestem na tyle zorientowany, aby to potwierdzić, ale z tym, jak wektor jest zaimplementowany, wydaje się, że tak jest, ale z pewnością ma sens pojemnik, który to obsługuje (np. Przez konstruktor destructor + copy). może jest coś w bibliotece boost? –
OK dzięki. Może będę jako osobne pytanie odnoszące się do tego, szczególnie jeśli nie otrzymam odpowiedzi tutaj. – ksl