Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, SFML] Jedna zmienna we wszystkich plikach

Ostatnio zmodyfikowano 2014-11-15 23:49
Autor Wiadomość
Winner_Of_Death
Temat założony przez niniejszego użytkownika
[C++, SFML] Jedna zmienna we wszystkich plikach
» 2014-11-15 21:27:26
Witam
Chcę utworzyć zmienną typu sf::RenderWindow tak, żeby można było z niej korzystać w innych klasach, funkcjach itp. w różnych plikach.
Wiem, że zmienne gloabalne to zło, lecz po co tworzyć zmienną w jednej klasie i potem przesyłać do innych klas, skoro i tak będę jej musiał używać prawie wszędzie ?
Próbowałem wielu sposobów między innymi z friend, static i extern, najwidoczniej robię błędy.
Pokażę na skromnym przykładzie z int'em zamiast sf::RenderWindow:

C/C++
//main.cpp
#include "1.hpp"

int main()
{
    return 0;
}

C/C++
//1.hpp
#pragma once

extern int zmienna;

#include "2.hpp"

C/C++
//1.cpp
#include "1.hpp"

C/C++
//2.hpp
#pragma once

class klasa
{
public:
    void funkcja();
};

C/C++
//2.cpp
#include "2.hpp"

void funkcja()
{
    zmienna = 10; //Błąd - zmienna was not declared in this scope
}
P-120703
1aam2am1
» 2014-11-15 21:45:18
Próbowałem kiedyś to zrobić ale wybiłem sobie to z głowy bo nawet gdy widziałem tą zmienną ze wszystkich plików w projekcie. To nadal po odwołaniu się do niej w każdym pliku przechowywała inną zmienną
np:

plik1 odwołuje się do zmienna wyświetla 5456477
plik2 odwołuje się do zmienna wyświetla 5646546

Wyświetlało różne wartości tak jakby w programie były to dwie różne zmienne.
P-120708
Winner_Of_Death
Temat założony przez niniejszego użytkownika
» 2014-11-15 21:49:07
A jak sobie z tym poradziłeś?
Zmarnowałem już naprawdę wiele dni, przeglądając dziesiątki wyników z googla i nadal nie wiem jak to zrobić ;/
Nie wyobrażam sobie robić większej aplikacji w SFML'u nie mając tej zmiennej.
P-120710
1aam2am1
» 2014-11-15 21:58:45
Stworzyłem plik.hpp
W którym miałem zmienną statyczną i dołączyłem ją do wszystkich plików nagłówkowych.
P-120713
Winner_Of_Death
Temat założony przez niniejszego użytkownika
» 2014-11-15 22:07:35
Jakieś rozwiązanie, dzięki ;)
Z całkowitą pewnością, wystarczy mi.
Tylko nasuwa mi się pytanie, czy tworzenie tylu zmiennych w osobnym pliku w dużych projektach, nie obciążałoby procesora?
P-120716
1aam2am1
» 2014-11-15 22:12:43
Program jest kompilowany do exe, więc nie. Wszystkie zmienne są i tak przechowywane w pamięci ram.

A, to jest offtop jeżeli masz inne pytania stwórz osobne tematy, ale wcześniej zapytaj się wujka google.
P-120718
Winner_Of_Death
Temat założony przez niniejszego użytkownika
» 2014-11-15 22:54:14
No nie wiem czy to był offtop, za bardzo związane z tematem, według mnie.
Aczkolwiek, sposób ze zmiennymi w innym pliku, raczej nie będzie się sprawował, chyba, że coś robię źle.
Podam kod przykładowego programu:
C/C++
//main.cpp
#include "zmienne.hpp"
#include "1.hpp"
int main()
{
    klasa k;
   
    zmienna = 5;
    std::cout << zmienna << "\n" << & zmienna << "\n";
   
    k.funkcja();
    k.ustaw();
   
    k.funkcja();
    return 0;
}

C/C++
//1.hpp
#pragma once
#include <iostream>
#include "zmienne.hpp"
class klasa
{
public:
    void funkcja();
    void ustaw();
};

C/C++
//1.cpp
#include "1.hpp"
void klasa::ustaw()
{
    zmienna = 10;
}

void klasa::funkcja()
{
    std::cout << zmienna << "\n" << & zmienna << std::endl;
}

C/C++
//zmienne.hpp
#pragma once

static int zmienna;

Nie rozumiem, skoro deklaruję tylko jedną zmienną jeden raz, czemu zmienna prosto z main'a ma inny adres, od tej użytej w klasie (Czyli tak jak pisałeś 2 posty wyżej)?
Przykładowe wyjście programu:


5
0x474008
0
0x474014
10
0x474014
P-120731
1aam2am1
» 2014-11-15 23:03:01
Też tego do końca nie rozumiem dlatego nie mogłem tego naprawić i dlatego w swoich programach muszę się bawić w przekazywanie klasy ze zmiennymi.
Jak ktoś wie to niech powie lub powie jak to zrobić.

PS. Chyba nie pozostało ci nic innego jak przekazywanie klasy ze zmiennymi.
P-120732
« 1 » 2
  Strona 1 z 2 Następna strona