• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Usuwanie pary z wektora

Cloud VPS
0 głosów
402 wizyt
pytanie zadane 7 grudnia 2016 w C i C++ przez niezalogowany

Witam, mam problem z usuwaniem pary z wektora. Mam oto taką parę

 

    std::vector<std::pair<Object, std::pair<float, float>>> m_objects;

a potem jedynie co z nim robię to próbuję usunąć tak:

for (auto itr = m_objects.begin(); itr != m_objects.end(); ++itr)
		{
			m_objects.erase(itr);	
		}

i wyskakuje błąd, które nie mogę się pozbyć:

Error    C2280    'Object&Object::operator =(const Object&)': attempting to reference a deleted function   

i wyrzuca mnie przy tym do pliku utility na 230 linię:

_Myt& operator=(_Myt&& _Right)
		_NOEXCEPT_OP((is_nothrow_move_assignable<_Ty1>::value
			&& is_nothrow_move_assignable<_Ty2>::value))
		{	// assign from moved pair
		first = _STD forward<_Ty1>(_Right.first); //do tego miejsca przenosi
		second = _STD forward<_Ty2>(_Right.second);
		return (*this);
		}



 

komentarz 7 grudnia 2016 przez plkpiotr Stary wyjadacz (12,420 p.)

A czy nie jest tak, że w pętli for próbujesz usuwać elementy, które są już usunięte? Bo np. weź ostatnią iterację, ostatni element znajdujący się przed końcem pętli już nie istnieje, a ty przypadkiem nie próbujesz go usunąć?

komentarz 7 grudnia 2016 przez niezalogowany
m_objects.end() wskazuje nie na ostatni element a "miejsce" po nim więc nie próbuję go usunąć
komentarz 7 grudnia 2016 przez plkpiotr Stary wyjadacz (12,420 p.)

Tak, tak to jasne... Chodziło mi o coś innego, ale to faktycznie nie powinno powodować błędu kompilacji, więc za mało wiem...

#include <iostream>
#include <vector>

int main () {
    std::vector<int> myvector;
    std::vector<int>::iterator it;
    for (int i = 0; i < 10; i++)
        myvector.push_back(i);
    for (it = myvector.begin(); it != myvector.end(); it++)
        myvector.erase(it);
    std::cout << "Vector:";
    for (unsigned int i = 0; i < myvector.size(); ++i)
        std::cout << ' ' << myvector[i];
    return 0;
}

Część elementów wektora pozostaje nadal...

1 odpowiedź

+1 głos
odpowiedź 7 grudnia 2016 przez unknown Nałogowiec (39,560 p.)
Pokaż kod klasy Object.
komentarz 7 grudnia 2016 przez niezalogowany
class Object: public Component
{
protected:
    const int m_ammountLettersInLine;
    const sf::Vector2i m_margins;

    sf::RectangleShape m_background;

    sf::Font *m_font;
    sf::Texture *m_texture;

    sf::Text m_text;
    
    void reScale();
    void createNewFont();

    void draw(sf::RenderTarget & target, sf::RenderStates states) const;

    
public:
    Object(std::string = "empty text", int = 20, sf::Vector2f = sf::Vector2f(300, 300), sf::Color = sf::Color::Red, sf::Font* = nullptr, sf::Texture* = nullptr, sf::Vector2i  = sf::Vector2i(25, 25));

    //Set a new text and rescale textbox
    void SetText(std::string arg);

    //VALUE -> <0;255>
    void SetTransparency(float arg);

};

 

Podobne pytania

0 głosów
1 odpowiedź 637 wizyt
pytanie zadane 11 października 2020 w C i C++ przez magda_19 Gaduła (3,080 p.)
0 głosów
1 odpowiedź 6,661 wizyt
pytanie zadane 19 grudnia 2019 w C i C++ przez New_programmer Początkujący (340 p.)
0 głosów
0 odpowiedzi 1,066 wizyt
pytanie zadane 18 sierpnia 2021 w C i C++ przez magda_19 Gaduła (3,080 p.)

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

62,908 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...