2017-10-14 33 views
0

J'ai vu un certain nombre de messages à ce sujet, mais ils semblent tous être adressés lorsque spme sorte de méthode est définie. Contexte de l'application: Essayer de créer un jeu de base de Sudoku pour maîtriser le C++.C++: une référence de membre non statique doit être relative à un objet spécifique

L'erreur semble indépendante du fichier .cpp de la fonction principale, donc je l'ignorerai à moins qu'il ne soit demandé de garder l'explication courte.

Le fichier board.h:

#pragma once 
class board 
{ 
public: 
    board(int gameSize, int diffifuclty) : gameSize(gameSize), difficulty(difficulty) {}; 
    ~board(); 

private: 
    int gameSize; int difficulty; 
    int game[gameSize][gameSize][gameSize][gameSize]; 
    void createRandom(); // Creates a random workable board. 
    void hasSolution(); // Checks if there's a solution from the current state. 

}; 

Je ne l'ai pas beaucoup jonglé avec le fichier board.cpp encore, comme je l'étais occupé tout définir dans le fichier board.h pour planifier ce qui fonctionne I vouloir écrire.

De toute façon, je veux avoir un plateau de jeu avec gameSize et difficulty étant entré dans la console. Je reçois l'erreur mentionnée dans mon titre lorsque j'essaie de construire le tableau multidimensionnel pour le plateau de jeu. (Donc avec Sudoku, le jeu 9x9 a la taille de jeu 3 ici.)

Je ne suis pas sûr de savoir quelle est l'erreur ou comment faire de ce tableau un attribut (je ne suis pas sûr si c'est la terminologie C++, donc désolé) de la planche?

+0

Votre tableau ne peut pas utiliser des variables membres pour la taille. ils doivent être disponibles au moment de la compilation. Donc, soit utilisez un vecteur >>> soit utilisez un vecteur de gamesize^4 avec une fonction de traduction, utilisez un int **** ou transmettez-le comme paramètre de modèle. – Beached

Répondre

0

Le problème que vous avez est un problème de POO typique avec C++. Vous pouvez trouver plus d'explications here. C'est parce que vous n'avez pas créé d'objet avant de faire référence à un membre de la classe.

Par exemple,

construct(game); // game is a member of class board. you need to create an object of board first. 

Voici le correct

board bd; 
construct(bd.game); 
+0

Ok donc c'est là que je suis confus, car je devine que C++ est différent des autres langues dans cet aspect. Tout d'abord, ce code va-t-il dans mon fichier 'main', board.h ou board.cpp? Deuxièmement, comment puis-je faire un tableau multidimensionnel comme requis dans ma classe alors? Dans d'autres langues, faire quelque chose de similaire ne me poserait pas de problème, car je n'utilise qu'un attribut. Alors qu'est-ce qui est différent ici? –

+0

pour autant que je sache, Java, C#, etc ont le même concept concernant 'static'. C++ n'est pas différent d'eux. normalement board.cpp est l'implémentation du tableau de classe. l'instanciation de la classe board est faite ailleurs. –