Logo Hardware.com.br
niTsumuji
niTsumuji Veterano Registrado
1.4K Mensagens 1 Curtida

Como definir variáveis globais em C++?

#1 Por niTsumuji 04/05/2005 - 09:57
Como posso fazer para definir variáveis globais em C++? Estou tentando aqui usando um .h, mas se uma classe altera o valor de uma variável lá, outra classe não pega esse valor novo.
Tipo, a nova classe reinicializa a variável. Talvez porque eu esteja incluindo o .h novamente na outra classs?
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#5 Por jqueiroz
04/05/2005 - 20:39
jackinabox
Que tal colocar uma declaração extern em um .H (extern int myglobalvarwink.png, declará-la em um CPP (int myglobalvarwink.png, e incluir o .H que contém a declaração extern em todos os .CPP que precisam acessar essa variável?


Foi assim que eu fiz no meu projeto final (C++). Eu tinha um "vars.cpp" e um "vars.h"...
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
pflynn
pflynn Ubbergeek Registrado
5.5K Mensagens 122 Curtidas
#6 Por pflynn
04/05/2005 - 21:25
São duas coisas diferentes: uma coisa é definir a variável, outra é declará-la. Normalmente isso é feito de uma vêz só (definicão e declaracão), mas se for utilizar variáveis globais (que muitos programadores com tendências fortes de OO odeiam), faca como sugeriram o jqueiroz e o jackinabox: defina a variável num arquivo .cpp e declare a como externa onde mais puder ser utilizada.
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
niTsumuji
niTsumuji Veterano Registrado
1.4K Mensagens 1 Curtida
#8 Por niTsumuji
06/05/2005 - 11:34
Essa variável tem que ser um membro direto da classe certo? Por que se eu puser como uma variável de um método, eu tenho esse erro:
In function `engine::engine[not-in-charge]()':
: undefined reference to `FPS'

FPS é a variável.
Calma! Não tema! Com Slackware não há problema!

-----------------
Slackware 11.0
AMD Athlon64 3000+@1800
OpenGL Programmer
Assembler n00b
k4z1nh0
k4z1nh0 Membro Junior Registrado
104 Mensagens 0 Curtidas
#9 Por k4z1nh0
06/05/2005 - 12:04
nao entendi direito sua pergunta, mas se sua duvida esta em declarar variaveis globais, ou seja sao declaradas fora de todas as funções, ja variaveis locais sao criadas sempre dentro de funcoes e soh sao visualizadas por meio dakela funcao.
variaveis externas sao compartilhadas por todos os programas fontes que utilizam a linkedicao incluindo seu respectivo arquivo.
portanto pode tentar utilizar o que o jackinabox disse.

Espero ter ajudado.
+--------------------------------+
+ Um abraço +
+--------------------------------+
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#10 Por jackinabox
06/05/2005 - 12:51
niTsumuji
Essa variável tem que ser um membro direto da classe certo?

Ooops... Estamos falando de uma variável global ou de uma variável membro?

Por que se eu puser como uma variável de um método, eu tenho esse erro: ...

Ooops de novo... Estamos falando de uma variável global ou de uma variável local (de um método)?

Agora não entendi mais...
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
niTsumuji
niTsumuji Veterano Registrado
1.4K Mensagens 1 Curtida
#11 Por niTsumuji
06/05/2005 - 14:06
A variável tem de ser global, mas a sua declaração tem de ser feita no .cpp, na classe, não é mesmo? Essa declaração é feita direto como membro da classe, ou pode ser de dentro de um método da classe?

Assim:
globais.h

extern float FPS

class1.cpp

#include "globais.h"
...
class class1{
private:
float FPS;
...
void metodo(void){};
...
Calma! Não tema! Com Slackware não há problema!

-----------------
Slackware 11.0
AMD Athlon64 3000+@1800
OpenGL Programmer
Assembler n00b
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#12 Por jackinabox
06/05/2005 - 20:32
Ooops: Editado, pois a inicialização da variável no meu exemplo estava no local errado oops.png

niTsumuji
A variável tem de ser global, mas a sua declaração tem de ser feita no .cpp, na classe, não é mesmo? Essa declaração é feita direto como membro da classe, ou pode ser de dentro de um método da classe?

niTsumuji:
Se a variável é global, isso significa que ela não será declarada nem como membro da classe, e nem dentro de um método da classe.

Variáveis declaradas dentro de um método são variáveis locais, e variáveis declaradas como membros da classe são variáveis membro, e esses termos são excludentes. Não existe algo como "variável global membro" ou "variável global local".

Pode haver "várias variantes" relacionadas a onde declarar e onde definir a variável global. Segue um exemplo:

globais.h

extern float fps; // declaração da variável (linkagem externa)


class1.cpp

#include "globais.h"

float fps = 24; // definição da variável

void Class1::metodo1()
{
// ...
fps = 30;
}
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#15 Por jackinabox
07/05/2005 - 12:13
jqueiroz
talvez ele esteja se confundindo com a visibilidade dos atributos (variáveis membros)... atributos públicos, privados...

Hummm... então talvez o niTsumuji não queira realmente declarar uma variável global, mas sim fazer outra coisa relacionada à visibilidade/acessibilidade :?:
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
© 1999-2025 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal