Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[c++/ Początkujący] - Operacja między obiektami zdeklarowanymi w różnych miejsca

fyplosh 02 Lis 2012 18:39 1275 23
  • #1 02 Lis 2012 18:39
    fyplosh
    Poziom 7  

    Witam, mój problem dotyczy kompilatora Builder 2010:

    Załóżmy taką sytuację

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Obiekt klasy deklarowany jest tu:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    I mam button, który miałby sprawić zmienienie się wartości zerowego elementu tablicy na 5. Taka próba oczywiście nie przechodzi, obiekt nie jest tu zadeklarowany.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Pytanie pewnie wyda się większości wręcz dziecinadą i zostanę wygnany do google, ale jestem w sytuacji podbramkowej, potrzebuję odpowiedzi na 3 godziny temu i zostało mi już tylko zaspamować na forum...

    0 23
  • #2 02 Lis 2012 18:47
    stanleysts
    Poziom 27  

    Popraw formatowanie.

    0
  • #3 02 Lis 2012 19:27
    mi14chal
    Poziom 28  

    No definiowanie obiektu w funkcji to nie jest dobry pomysł bo wiadomo że w innej funkcji się do niego nie odniesiesz.

    0
  • #4 02 Lis 2012 19:28
    fyplosh
    Poziom 7  

    Nigdy nie mogłem powiedzieć o sobie - programista, do tego teraz miałem jeszcze rok przerwy. Prosił bym jaśniej...

    EDIT:
    Dziękuję serdecznie za pomoc, problem solved.

    0
  • Pomocny post
    #5 02 Lis 2012 19:35
    stanleysts
    Poziom 27  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Co prawda obiekty tworzone operatorem new mają zakres od daty utworzenia do usunięcia operatorem delete i nie obowiązują ich zależności widoczności, ale nie można już tego powiedzieć o wskaźnikach na nie pokazujących.
    Takie tworzenie danych w funkcji jest nie za dobre, jak już musisz to potem przekazuj adres tego wskaźnika do jakiegoś globalnego wskaźnika, co pokazałem w kodzie, ale nie jest to też super rozwiązanie.

    0
  • #6 02 Lis 2012 19:39
    fyplosh
    Poziom 7  

    Dzięki serdeczne za pomoc, jeszcze przy okazji:
    potrzebuję by funkcja stworzona przeze mnie modyfikowała Canvas obiektu typu TImage.
    Nie będę rozpisywać ilości prób rozwiązania problemu, a i google przekopałem (w zasadzie nie wiem, jak dobrze zadać pytanie). Help?

    0
  • #7 02 Lis 2012 19:41
    stanleysts
    Poziom 27  

    Wklej jakiś kod bo ciężko coś bez tego powiedzieć, i przeformatuj go dobrze ([syntax=c++] [/syntax])

    0
  • #8 02 Lis 2012 19:48
    fyplosh
    Poziom 7  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Przykład, który podałem oczywiście nie działa, ale mam nadzieję, że widać jaki efekt chciałbym uzyskać.

    0
  • #9 02 Lis 2012 19:57
    stanleysts
    Poziom 27  

    No ale co mi taki fragment kodu daje? nie wiadomo co to jest i jaki ma zakres: Image1, Canvas etc...

    Zrób te wskaźniki globalnie to będzie działało, albo wogóle lepiej jako składniki jakiejś kalsy, i metody mogą je tylko modyfikować.

    0
  • #10 02 Lis 2012 20:04
    fyplosh
    Poziom 7  

    Kod mojego programu ma aktualnie ponad 500 lini, nie wiem czy jest sens go umieszczać...
    Mam Form1, obiekt typu TImage oraz button, potrzebuję by funkcja malarz po wciśnięciu buttona rysowała pixel o kolorze (255,255,255) w lewym górnym rogu Image1...

    0
  • #11 02 Lis 2012 20:09
    stanleysts
    Poziom 27  

    Da się na pewno to skrócić, tak to jest wróżenie z fusów, zresztą możesz zrobić tak jak pisałem wyżej.

    0
  • #12 02 Lis 2012 20:17
    fyplosh
    Poziom 7  

    A więc zaraz spróbuję to skrócić, póki co próbowałem zrobić to tak, kompilator zwraca błąd
    [BCC32 Error] Unit1.cpp(321): E2285 Could not find a match for 'TImage::TImage()'
    Full parser context
    Unit1.cpp(320): parsing: void func()

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #13 02 Lis 2012 20:19
    stanleysts
    Poziom 27  

    Jaki błąd zwraca, to te same wskaźniki, mógłbyś chciaż podać ich typ gdzieś i gdzie są zadeklarowane...
    Myślisz, że ktoś coś doradzi po zobaczeniu 1 linijki nie wiadomo skąd wziętej bez nawet informacji - co jest źle.

    0
  • #14 02 Lis 2012 20:25
    fyplosh
    Poziom 7  

    [BCC32 Error] Unit1.cpp(321): E2285 Could not find a match for 'TImage::TImage()'

    Sory, myślałęm, że wkleiłem w poprzednim poście.

    Dodano po 5 [minuty]:

    Jestem zielony w tym temacie, sory za wszelkie problemy. Do stworzenia Image1 użyłem po prostu Tool Palette i naciągnąłem na forma, nic mi nie wiadomo na temat tych obiektów...
    Cała reszta dzieje się już tylko w obrębie funkcji z poprzedniego posta...
    Mam nadzieję, że coś z tego zrozumiałeś...

    0
  • #15 02 Lis 2012 20:29
    stanleysts
    Poziom 27  

    Może obiekt TImage nie ma w ogóle konstruktora domniemanego.

    0
  • #16 02 Lis 2012 20:32
    fyplosh
    Poziom 7  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    W takim razie jakiś pomysł jak z pomocą funkcji korzystać z canvasu Image1?

    0
  • #17 02 Lis 2012 20:41
    stanleysts
    Poziom 27  

    Dalej nie wiadomo gdzie te obiekty (wskaźniki zostały i czy w ogóle zostały zadeklarowane). Patrząc na tyle kodu to podtrzymuje to co wcześniej, te wskaźniki muszą być globalne żeby je w tej funkcji było widać.

    0
  • #18 02 Lis 2012 20:43
    fyplosh
    Poziom 7  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Więcej nie mam... : d

    0
  • #19 02 Lis 2012 21:04
    stanleysts
    Poziom 27  

    Zrobić sobie tę funkcję func jako metode klasy Tform1

    0
  • #20 02 Lis 2012 21:27
    fyplosh
    Poziom 7  

    Nie wiem czy dobrze rozumiem - TForm jak dla mnie siedzi w bibliotece i było by to mocno problematyczne, żeby dołączyć metodę(?)

    0
  • #22 02 Lis 2012 21:44
    fyplosh
    Poziom 7  

    Hmm... Form1 jest obiektem klasy TForm, rozumiem, że dałeś mi teraz znaczącą wskazówkę, ale niestety, niewiele mi to mówi...
    Do istniejącego obiektu dołączyć metodę?

    0
  • #23 02 Lis 2012 21:56
    stanleysts
    Poziom 27  

    form1 nie jest obiektem tej klasy tylko po niej dziedziczy i tak do tego obiektu form1 dołącz metodę func

    0
  • #24 04 Lis 2012 18:37
    fyplosh
    Poziom 7  

    Rozwiązanie jest żenująco proste...
    Próbowałem zastosować je wcześniej, lecz wyskakiwały jakieś błędy. Stwierdziłem, że to mój tok rozumowania jest błędny i zacząłem szukać pomocy na forum...
    Zamiast:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Wystarczy:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Dzięki jeszcze raz za pomoc i prosił bym o usunięcie tematu...[/code]

    Dodano po 1 [godziny] 45 [minuty]:

    Albo jeszcze jedno pytanie.. ; )
    Jeśli funkcja malarz jest w jednym pliku z funkcją główną programu - program kompiluje się bez problemu.
    Podzieliłem kod na części, żeby uniknąć śmiecenia i od tego momentu funkcja malarz zaczyna wyrzucać błędy w trakcie kompilacji. Rozumiem, że przez to, że jest w innym pliku, są problemy z dostępem do Form1(?)
    Pomocy...

    Dodano po 2 [minuty]:

    I jeszcze jedno pytanie:
    Czy jest sposób by przekazać do funkcji Canvas?
    Chodzi mi o:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    coś w tym stylu, napisałem, żeby było mniej więcej wiadomo o co chodzi ; )

    Dodano po 32 [minuty]:

    Doszedłem już do tego, że Form1 nie jest widoczny z innych plików z funkcjami, widoczność mógłbym uzyskać dodając extern przed deklaracją forma, ale chyba mija się to z celem z tego co rozumiem.
    Czy mógłby się, ktoś wypowiedzieć i utwierdzić (lub zbesztać) w tym przekonaniu?

    0
  Szukaj w 5mln produktów