Sposób na globalne przechowanie danych (C++/CLI)

0

Witam. Mam ogromny problem, zapewniam, ze po internecie szukałem rozwiązania ale juz mam dośc.. 2 godziny czytania dokumentacji/for i człowiek naprawdę wątpić zaczyna.

Pisze aplikację w c++ wykorzystujac Windows Forms.

Potrzebuje tablice(badz liste) stringow do ktorej bede sie mogl odwolywac z roznych funkcji ale dane musza byc te same. Tzn mam np. funkcje wyswietlklienta() ktora jest wywolywana z buttona. no i ta funkcja pobiera dane z tablicy (5xString) i wyswietla na ekranie. Ale jest tez drugi guzik i nacisniecie go powoduje dodanie nowego klienta do tej tabeli.
Oczywiscie globalnej tablicy stringow nie mozna zrobic. Probowalem takze zrobic sobie klase, ale po utworzeniu klasy i zadeklarowaniu tak tablic:

static array<String^>^ tablica = gcnew array<String^>(20); 

To nie wiem jak utworzyc obiekt zeby byl dostepny dla obydwoch przyciskow.

Ogolnie chce to zrobic w najprostszy sposob niewazne jakim kosztem.. Dziekuje bardzo

0

Tworzysz nową klasę, deklarujesz statyczną tablice i odwołujesz się do tego. Nie widzę żadnego problemu dlaczego dla jednej kontrolki ma działać a dla drugiej nie

0

no chodzi o to ze gdzie mam wprisac

daneklientow dane;

Zeby obydwie kontrolki mogly sie odwolywac do np. dane.imieKlienta

0

Nigdzie nie musisz. Odwołujesz się tak samo jak w normalnym C++ tj. po prostu DaneKlientow::dane czy tam DaneKlientow.dane (nie pamiętam w tej chwili czy powinna być w zmiennych statycznych kropka czy 2 dwukropki, bo dawno nie pisałem nic w tym języku). Jeśli statyczny i publiczny obiekt jest w globalnej klasie to każda kontrolka może się do niego bez przeszkód odwoływać. Myli ci się to z programowaniem obiektowym gdzie trzeba najpierw instancje obiektu stworzyć.

0

No tak boze! Fatalny blad z mojej strony, dziekuje bardzo. Juz taka sieczke z mozgu mam...

a takie dodatkowe pytanko. Czy idzie w Visual Studio a jednym pliku miec dwie klasy tak zeby designer sie nie rzucal?
Jak moja klasa jest przed klasa Form1 to designer nie funkcjonuje, a jak za Form1 to znowu kompilator zmiennych nie widzi

0

Istotna jest wersja Visuala.

VS 2012 dużo lepiej toleruje niestandardowy kształt pliku niż VS 2008.
Przykładowo można rozbić formę na standardowe pliki .h i .cpp, i designer 2012 się wcale nie gubi. Rozwiązuje to sporo problemów.

Nie pamiętam za bardzo jak jest w 2010, nie pisałem w nim bo brak IntelliSense.

A najlepiej klasę wydzielić do osobnego .h albo .h/.cpp i zrobić normalnie #include.

0

Akurat w głównym pliku formy nie może być na 100% i generalnie standardy podpowiadają żeby z inferface robić wyłącznie calle do innych klas. Czy w własnym pliku można robić 2 klasy pojęcia nie mam bo nigdy nie próbowałem. Spróbuj sam, sprawdzić to to kilkadziesiąt sekund z hakiem, jednakże nie polecam osobiście wrzucać więcej niż jednej klasy do pliku bo to się potem myli. Może nie od razu ale jak wracasz do projektu po jakimś czasie to nie wiesz co gdzie jest (Na szczęście jest szukanie definicji w M$ VS, jednakże nie zawsze jest tak szybkie i skuteczne jak nasz mózg), dlatego najlepszym sposobem jest nadawanie klasie takiej nazwy jak plik w którym jest przechowywana. Dużo bardziej czytelnie jest wtedy.

1

@Dubler: Z punktu widzenia kompilatora nie ma znaczenia jak sobie klasy podzielisz, możesz nawet cały program trzymać w jednym pliku.

Kwestia jak sobie z tym poradzi designer, który spodziewa się konkretnej konwencji według której generuje kod formy.

0

No mozna wlasnie klasy w jednym pliku trzymac, wszystko bez problemu sie kompiluje, jedynie designer nie chce sie wtedy uruchomic i kaze przeniesc klase Form1 na sama gore (nawet nie kaze to innego pliku przenosic), no ale niestety wtedy zmienne utworzone w drugiej klasie nie sa widoczne, takze chyba jedynym rozsadnym rozwiazaniem to do osobnego pliku.

Dziekuje panom bardzo, wszystko w temacie już wiem. Mozna zamknac

1 użytkowników online, w tym zalogowanych: 0, gości: 1