CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Przesyłanie struktury pomiędzy unitami

Przesyłanie struktury pomiędzy unitami

dział ogólny

Przesyłanie struktury pomiędzy unitami

Nowy postprzez Boshi » środa, 26 listopada 2014, 21:09

Mam plik Unit1.cpp w którym mam tablice struktur zadeklarowaną zaraz za nagłówkami
#pragma package(smart_init)
#pragma resource "*.dfm"
Jak można odnosić się do tej struktury w pliku Unit2.
Próbowałem Form1->dane[i].imie ... i pisze, że dane nie są z formy 1.

KOD cpp:     UKRYJ  
 #pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1, *Form2, *Form3;
 //Data struct
                struct losuj
       {
         string imie;
         string nazwisko;
         string helm;
         string suit;
         string boots;
         string gloves;
         AnsiString cena;
         AnsiString data;
         AnsiString faktura;
         string gwarancja;

       } dane[1000];  
Avatar użytkownika
Boshi
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): piątek, 14 listopada 2014, 17:29
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Bulider 2006
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez polymorphism » czwartek, 27 listopada 2014, 09:52

Przeszukaj to forum, bo wielokrotnie pokazywałem, jak definiować zmienne globalne.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    LinuxChrome

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez Cyfrowy Baron » czwartek, 27 listopada 2014, 09:54

Poczytaj o przekazywaniu obiektów i funkcji między formularzami: ihttp://programowanie.cal.pl/cyfbar/teor9.htm

W pliku nagłówkowym Unit1.h w sekcji public stwórz strukturę, a w drugiej jednostce włącz Unit1.h do pliku źródłowego i przekazuj przez Form1 tak jak próbowałeś:

Plik nagłówkowy Unit1.h:
KOD cpp:     UKRYJ  
public:

       struct losuj
       {
         string imie;
         string nazwisko;
         string helm;
         string suit;
         string boots;
         string gloves;
         AnsiString cena;
         AnsiString data;
         AnsiString faktura;
         string gwarancja;

       };

     losuj dane[1000];


Plik źródłowy np. Unit2.cpp:
KOD cpp:     UKRYJ  
#include "Unit1.h"
// [...]
Form1->dane[i].imie ...
 

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Boshi
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez Boshi » czwartek, 27 listopada 2014, 13:04

Cyfrowy Baron napisał(a):Poczytaj o przekazywaniu obiektów i funkcji między formularzami: <!-- m --><a class="postlink" href="ihttp://programowanie.cal.pl/cyfbar/teor9.htm">ihttp://programowanie.cal.pl/cyfbar/teor9.htm</a><!-- m -->

W pliku nagłówkowym Unit1.h w sekcji public stwórz strukturę, a w drugiej jednostce włącz Unit1.h do pliku źródłowego i przekazuj przez Form1 tak jak próbowałeś:

Plik nagłówkowy Unit1.h:
KOD cpp:     UKRYJ  
public:

       struct losuj
       {
         string imie;
         string nazwisko;
         string helm;
         string suit;
         string boots;
         string gloves;
         AnsiString cena;
         AnsiString data;
         AnsiString faktura;
         string gwarancja;

       };

     losuj dane[1000];


Plik źródłowy np. Unit2.cpp:
KOD cpp:     UKRYJ  
#include "Unit1.h"
// [...]
Form1->dane[i].imie ...
 
Probówałem tak i dostaję mnóstwo błędów, typu redeklarowanie, brakujące coś..

http://gyazo.com/a5fc1fd949a4328366d53b53817e400e

Edit, naprawiłem i twój sposób działa. Powiesz mi jeszcze czemu kompilator ma problemy z typem string? Zamieniłem wszystko na AnsiString potem konwersja c_str() przy przepisywaniu i działa jak należy?
Dzięki za pomoc.
Avatar użytkownika
Boshi
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): piątek, 14 listopada 2014, 17:29
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Bulider 2006
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez polymorphism » czwartek, 27 listopada 2014, 13:11

Powiesz mi jeszcze czemu kompilator ma problemy z typem string?

A załączyłeś nagłówek <string>? A pamiętałeś o przestrzeni nazw biblioteki standardowej std?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez Boshi » czwartek, 27 listopada 2014, 14:23

Był załaczony w pliku cpp. Teraz patrzyłem jeszcze dla pewności, to jak dam String z wielkiej litery to też działa :o serio tutaj rozróżniana jest wielkość liter w typach? string a String to 2 inne typy?
Avatar użytkownika
Boshi
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): piątek, 14 listopada 2014, 17:29
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Bulider 2006
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez polymorphism » czwartek, 27 listopada 2014, 14:48

String to alias AnsiStringa lub UnicodeStringa - w zależności od wersji IDE. std::string to typ standardowy, wchodzący w skład języka C++.

serio tutaj rozróżniana jest wielkość liter w typach?

Heh. W C/C++ wielkość liter ma znaczenie, nie tylko w nazwach typów.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez Boshi » czwartek, 27 listopada 2014, 15:41

Dziwne, nie zróciłem nigdy na to uwagi, byc może właśnie dlatego, że pierwszy raz miałem tego typu problem.
To ostatnie pytanie
Co może być powodem exceptiona? Ten kawałek kodu ma sprawdzać czy w tablicy struktur występuje imię podane w Edit2, jeżeli tak, to do StringGrida ma je przepisać.
Pętla jest do 100 tylko testowo.
KOD cpp:     UKRYJ  

   for (i=1;  i<100; i++)

          {
              if (Form1->dane->imie[i]== Edit2->Text)
               
Avatar użytkownika
Boshi
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): piątek, 14 listopada 2014, 17:29
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Bulider 2006
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez polymorphism » czwartek, 27 listopada 2014, 16:01

Jedyne, co tu potencjalnie może powodować wyjątek, to to, że przekraczasz zakres "tablicy" imie. W C/C++ nie możesz sobie indeksować jak Ci się podoba, indeks nie może przekroczyć wielkości tablicy (w tym przypadku łańcucha znakowego)! Jeśli imie to klasa String, użyj wtedy metody Length do określenia długości napisu.

Generalnie odsyłam do jakiejś dobrej książki z podstawami języka C++.

KOD cpp:     UKRYJ  
if (Form1->dane->imie[i]== Edit2->Text)

Co Ty tu porównujesz, literę imienia z łańcuchem z Edit2? Pewny jesteś, że o to Ci chodziło?
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Boshi
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez Boshi » czwartek, 27 listopada 2014, 16:04

Tak wiem o indexach, ale w Buliderze to działą trochę inaczej niż w konsoli.
Avatar użytkownika
Boshi
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): piątek, 14 listopada 2014, 17:29
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Bulider 2006
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez polymorphism » czwartek, 27 listopada 2014, 16:12

A niby dlaczego miałoby być inaczej? (pomijam idiotyczny fakt indeksowania od jednego, który na szczęście odnosi się jedynie do klas VCL, a nie całego języka).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez Boshi » czwartek, 27 listopada 2014, 16:38

W konsoli jakoś tak to bardziej przejrzyste było wszystko.

Wracając jeszcze do pytania twojego.. fakt tam jest oczywiście błąd, powinno być
KOD cpp:     UKRYJ  
Form1->dane[i].imie
, przecież szukamy w tablicy struktur a nie literkach.
Teraz działa.. czasami coś pisze a potem szukam godzinę błędu...

Zamykając temat jeszcze chciałbym spytać, czy macie może link do jakiejś dokumentacji czy poradnika aby posortować QuickSortem Struktury danych po każdym polu ? Coś czytałem o STL Sort, tyle, że nie mam narazie pojęcia jak by wyglądała np funkcja porównująca dla nazwiska/imienia itd
Avatar użytkownika
Boshi
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): piątek, 14 listopada 2014, 17:29
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Bulider 2006
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez polymorphism » czwartek, 27 listopada 2014, 16:54

Coś czytałem o STL Sort, tyle, że nie mam narazie pojęcia jak by wyglądała np funkcja porównująca dla nazwiska/imienia itd

Można tak, z użyciem lambdy:
KOD cpp:     UKRYJ  
losuj dane[10];

unsigned n = 10; // liczba elementów w tablicy 'dane'.

...

std::sort( &dane[0], &dane[n], [](losuj& a, losuj& b) { return a.imie < b.imie; } );

std::sort( &dane[0], &dane[n], [](losuj& a, losuj& b) { return a.nazwisko < b.nazwisko; } );
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez Boshi » czwartek, 27 listopada 2014, 17:34

KOD cpp:     UKRYJ  
[](losuj& a, losuj& b)


wyrzuca [C++ Error] Unit2.cpp(316): E2188 Expression syntax
Nie jest to problem z kompilatorem czasem? słyszałem że potrzebny jest obsługujący standard c++ 11. A pisze w Buliderze 2006. A ten zdaje się obsługuje wersje 10
Avatar użytkownika
Boshi
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): piątek, 14 listopada 2014, 17:29
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Bulider 2006
Gadu Gadu: 0
    Windows 7Firefox

Re: Przesyłanie struktury pomiędzy unitami

Nowy postprzez polymorphism » czwartek, 27 listopada 2014, 18:52

No to stwórz funkcje na wzór tych lambd. Tyle to już chyba sam możesz zrobić...
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Boshi
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 57 gości