Jim from Princeton
Jim from Princeton

Reputation: 741

C++ iterator mismatch error

I am keeping track if instances of my class using std::vector to store pointers to all of the class objects. I'm wrapping things up and want to remove the pointer in the destructor... but I am getting the following error:

Brazos.cpp:15:89: error: cannot convert 'std::vector::iterator {aka __gnu_cxx::__normal_iterator >}' to 'const char*' for argument '1' to 'int remove(const char*)' instanceAddress.erase(std::remove(instanceAddress.begin(), instanceAddress.end(), this) instanceAddress.end());

it seems I may need to dereference the iterator... Here is my code:

std::vector<Brazos*> Brazos::instanceAddress;

Brazos::Brazos(Mano mano)
{
  instanceAddress.push_back(this);
  _mano = mano;
}

Brazos::~Brazos(void)
{
  instanceAddress.erase(std::remove(instanceAddress.begin(), instanceAddress.end(), this) instanceAddress.end());
}

Upvotes: 2

Views: 436

Answers (1)

flogram_dev
flogram_dev

Reputation: 42888

You're missing a comma:

instanceAddress.erase(std::remove(instanceAddress.begin(), instanceAddress.end(), this), instanceAddress.end());
                                                                                       ^

Also, the error message refers to int std::remove(const char*), so make sure you have #include <algorithm> for the correct std::remove.

Upvotes: 3

Related Questions