J'ai une variable player
qui contient un vecteur de Resource
classe qui dérive de Name
et ID
classe.C++ classe de base invoque une fonction supprimée ou inaccessible
Le problème se situe lorsque je compile le code et les erreurs suivantes apparaissent pendant la compilation.
resources.h(27): note: 'Resources &Resources::operator =(const Resources &)': function was implicitly deleted because a base class invokes a deleted or inaccessible function 'IdClass &IdClass::operator =(const IdClass &)'
idclass.h(11): note: 'IdClass &IdClass::operator =(const IdClass &)': function was implicitly deleted because 'IdClass' has a data member 'IdClass::id' of const-qualified non-class type
idclass.h(4): note: see declaration of 'IdClass::id'
En fait ce que je faisais dans Resources.cpp
est, j'avais une fonction qui initialise les ressources du vecteur du joueur. J'ai été dérangé par cette erreur parce que je n'ai pas regardé autour dans StackOverflow pour quelques réponses mais je n'ai pas vu quelques réponses utiles. Ce link est venu près mais je ne suis pas sûr si changer le const dans une valeur non const est ce dont j'ai besoin.
Voici le code.
dans Resources.h
#include "NameClass.h"
#include "IdClass.h"
#include "settings.h"
class PlayerClass;
class Resources : public NameClass, public IdClass
{
public:
/*Sets the name and id*/
Resources(string n, const short identifier):NameClass(n), IdClass(identifier){}
static void InitializeResourceContainer(PlayerClass& player){
// playerInv is a struct
// rssContainer is a vector<Resources>
// name_x and id_x comes from settings.h which is #defined
player.playerInv.rssContainer.push_back(Resources(name_Stone, id_Stone));
player.playerInv.rssContainer.push_back(Resources(name_Wood, id_Wood));
player.playerInv.rssContainer.push_back(Resources(name_Plastic, id_Plastic));
player.playerInv.rssContainer.push_back(Resources(name_Thatch, id_Thatch));
player.playerInv.rssContainer.push_back(Resources(name_Fabric, id_Fabric)); // this is line 27
// plus a lot of resources
}
}
dans IdClass.h
class IdClass
{
const short id;// line 4
public:
/*Sets the id*/
IdClass(const short idToSet);
/*returns the id*/
short GetId() const;
}; // line 11
dans IdClass.cpp
#include "IdClass.h"
/*Sets the id*/
IdClass::IdClass(const short idToSet) : id(idToSet)
{
}
/*returns the id*/
short IdClass::GetId() const { return id; }
Ceci est un petit morceau de code, je travaille sur . Si vous avez besoin de plus d'explications ou de code, je peux en donner dans les commentaires ci-dessous.
Edit 1: On dirait que j'ai oublié de placer le code d'erreur après la sortie. De plus, je suis en utilisant Visual Studio 2017
Error C2280 'Resources &Resources::operator =(const Resources &)': attempting to reference a deleted function f:\visual studio\2017\vc\tools\msvc\14.10.25017\include\xutility 2310
Changer la variable const short
-short
en IdClass.h créerait une erreur de liens dans une de mes classes. Donc, évidemment, les deux threads que deux commentateurs n'étaient pas très utiles.
Ce que je vise à faire est d'obtenir la valeur d'ID de Resources.h à IdClass.h.
Je ne vois que des 'notes', pas des erreurs. Est-ce qu'il construit un exécutable, ou y a-t-il des erreurs que vous ne montrez pas? La note dit fondamentalement "ne peut pas faire un opérateur d'assignation par défaut, à cause du membre const". – Baldrick
vous voulez savoir comment copier un objet quand il a des membres 'const'? – user463035818
lire la réponse acceptée ici: https://stackoverflow.com/questions/634662/non-static-const-member-cant-use-default-assignment-operator Il explique pourquoi vous ne pouvez pas utiliser '=' sur les objets qui ont const membres . Si le projet se construit correctement, et que vous n'attribuez pas 2 objets de ressources de type, vous devriez être OK –