[C++] Errore con membro classe statico

martedì 18 agosto 2009 - 09.42

Revan1985 Profilo | Junior Member

Buongiorno a tut le mond....
Ho biogno di un piccolo aiuto in c++, in quanto arruginito...

Sto creando una classe per gestire gli input in c++ & dx10, ma ho un piccolo problema...
Questo

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

il codice in questione è questo, e il problema è nella classe Mouse [ma non si era capito dai ]

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ora, se provo a definire WEIGHT_MODIFIER nella classe mi dice

Error 10 error C2864: 'Mouse::WEIGHT_MODIFIER' : only static const integral data members can be initialized within a class c:\users\davide\desktop\iwin32sx10\iwin32sx10\xinput.hpp 499 iWin32SX10
Error 13 error C2864: 'Mouse::WEIGHT_MODIFIER' : only static const integral data members can be initialized within a class c:\users\davide\desktop\iwin32sx10\iwin32sx10\xinput.hpp 499 iWin32SX10


come risolvo?
grazie ^^

Non c'è emozione; c'è pace.
Non c'è ignoranza; c'è conoscenza.
Non c'è inquietudine; c'è serenità.
Non c'è caos; c'è armonia.
Non c'è morte; c'è la Forza.

aiedail92 Profilo | Expert

Ciao

Secondo me dovresti separare la dichiarazione dei metodi e delle variabili (nel file .hpp) dalla loro implementazione (nel file .cpp)

Facendo come fai tu, ogni volta che il file .hpp viene #incluso, tutto ciò che c'è al suo interno è come se venisse ridefinito, con conseguenti errori di definizioni multiple dello stesso simbolo.

Separando invece la dichiarazione dalla definizione, quando #includi il file .hpp istruisci il compilatore sulla presenza dei simboli, ma questi sono definiti una sola volta nel file .cpp, e tutto dovrebbe filare liscio.

Ecco un breve esempio per come devi fare:

file.hpp:
#ifndef __FILE_HPP__ #define __FILE_HPP__ #include <d3dutil.hpp> class Mouse { public: enum MouseButton { BUTTON_LEFT = 0x00, BUTTON_RIGHT = 0x01, BUTTON_MIDDLE = 0x02, }; static Mouse &instance(); bool buttonUp(MouseButton button) const; bool buttonDown(MouseButton button) const; /* etc... */ private: Mouse(); ~Mouse(); bool create(); /* etc... */ // Dichiari soltanto le variabili static const, senza definirle static const float WEIGHT_MODIFIER; static const int HISTORY_BUFFER_SIZE; IDirectInput8* input; IDirectInputDevice8* device; /* etc... */ }; #endif

file.cpp:
#include "file.hpp" // Definisci le variabili static const const int Mouse::HISTORY_BUFFER_SIZE = 10; const float Mouse::WEIGHT_MODIFIER = 0.2f; // Definisci il costruttore e il distruttore Mouse::Mouse() { // constructor... } Mouse::~Mouse() { // destructor... } // Definisci le funzioni Mouse &Mouse::instance() { static Mouse inst; return inst; } bool Mouse::buttonUp(Mouse::MouseButton button) const { // return ...; } bool Mouse::buttonDown(Mouse::MouseButton button) const { // return ...; } bool Mouse::create() { // etc... }

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5