error C2597: référence non conforme à un membre non static

3 réponses
Avatar
michel
Bonjour,

Soit :

class CTest
{
public:
int m_intTest;
static void TestFunct()
{
m_intTest = 1;
}
};

J'obtiens logiquement :

error C2597: référence non conforme à un membre non static

Mais comment faire pour modifier m_intTest dans ma fonction TestFunct
(que je veux statique) ?

Car si je fais
CTest c;
c.m_intTest = 1;

ça passe à la compil, mais je ne peux qd même pas instancier Ctest à
chaque appel de TestFunct() ?


Merci.

3 réponses

Avatar
Matthias
michel a écrit :

(...) Mais comment faire pour modifier m_intTest dans ma
fonction TestFunct (que je veux statique) ?



Vous pourriez faire de m_intTest une variable statique:

class CTest { public:
static int m_intTest;

static void TestFunct() {
m_intTest = 1;
}
};

Dans ce cas il n'est plus utile d'instancier CTest.
--
Matthias
Avatar
michel
Matthias a écrit :
michel a écrit :

(...) Mais comment faire pour modifier m_intTest dans ma fonction
TestFunct (que je veux statique) ?



Vous pourriez faire de m_intTest une variable statique:

class CTest { public: static int m_intTest;
static void TestFunct() { m_intTest = 1; } };
Dans ce cas il n'est plus utile d'instancier CTest.



Merci, mais en fait j'avais essayé et je n'arrive pas à l'utiliser
ailleurs si je la mets en static.

Par exemple dans le Constructeur :

CTest::CTest()
{
m_intTest = 1;
}

j'obtiens :
error LNK2001: symbole externe non résolu "public: static int
CTest::m_intTest" (?@@2HA)
Avatar
michel
michel a écrit :

Merci, mais en fait j'avais essayé et je n'arrive pas à l'utiliser
ailleurs si je la mets en static.



Bon, après divers essais, j'y suis arrivé : il faut que je la définisse
aussi en dehors =>


class CTest
{
public:
CTest();
static int m_intTest;
static void TestFunct()
{
m_intTest = 3;
}
};

int CTest::m_intTest = 2;

CTest::CTest()
{

m_intTest = 1;

}