c++ erreur: appel à la non-fonction membre statique sans objet argument

J'ai hérité d'un code qui utilise la classe de l'adaptateur et je veux le convertir pour utiliser l'adaptateur d'objet de modèle.

La classe personnalisée string est l'adaptation std::string, et c'est dans la MyString espace de noms.
Voici un extrait de la façon dont le code ressemble avant je le modifier.

//mystring.h
namespace MyString
{

//StringInterface is the new (abstract) interface that the client will use.
//Inheriting the implementation of std::string to build on top of it.
class string : public StringInterface, private std::string
{
  ...
};

}

//mystring.cpp
namespace MyString
{

...

string& MyString::string::operator=(const string& s) //copy assignment operator
{
  if (this != &s) std::string::operator=(s);
  return *this;
}

...

}

Une fois que j'ai supprimer le privé de l'héritage de std::string (qui je le fais parce que--corrigez-moi si je me trompe--l'adaptateur d'objet modèle utilise composition et de ne pas l'héritage de la mise en œuvre), la déclaration std::string::operator=(s); provoque l'erreur "appel à la non-fonction membre statique sans objet argument".

Donc je ne suis pas vraiment sûr de savoir comment accomplir cela. C'est ma première fois avec l'adaptateur motif (et C++ n'est pas ma langue la plus forte); peut-être que je suis donnant sur quelque chose de simple.

Suffit d'attribuer s à vos données de membre. Pas besoin de faire de la vérification d'adresses, soit. Utilisez le copier-swap idiome.
N'héritent pas de choses qui n'ont pas un destructeur virtuel.
C'était plus ou moins fine privé de l'héritage - mais ils sont en train d'utiliser la composition à la place maintenant.
swap soulève de nouvelles erreurs de compilation, et lors du débogage d'eux, j'ai aussi essayé Garcia réponse qui résout également le problème.
À l'exception de la copie de swap ne sera jamais vous laisser avec une (demi-cul)igned objet. Juste std::swap chaque membre.

OriginalL'auteur Dennis | 2013-07-16