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

[C++ Borland Builder] - wlasne funkcje odnoszace sie do obiektow.

Ostatnio zmodyfikowano 2017-08-15 08:09
Autor Wiadomość
R0P
Temat założony przez niniejszego użytkownika
[C++ Borland Builder] - wlasne funkcje odnoszace sie do obiektow.
» 2017-08-14 21:52:20
*** Brak polskich znakow po jestem w NL i laptop mam ustawiony na EN ***

Hej. Otoz sprawa wyglada tak. Chce wykorzystac np. on-clicka podpiete do obiektu stworzonego w Borlandzie - np. buttona - ktory ma cos tam robic. Zeby bylo czytelniej szybciej i wygodniej chce podac w tym on-clicku nie kod jakiegos dzialania lecz funkcje zrobiona wlasnorecznie. Niestety owa nie czyta np. pobrania z czy wczytania do obiektu gdyz tego obiektu nie widzi.

Domyslam sie ze to kwestia przekazania funkcji klasy i obiektu jako parametrow i uzycie ich w jej ciele. Niestety probojac ratowac sie wczoraj google i artykulami tam znalezionymi - nie dalo rady - nie moge za nic zrozumiec, wszystko wydaje mi sie metne i pogmatwane.

Dlatego wrzucam tutaj kod super prostego programu - jeden przycisk i jedno pole. On-click przycisku wywoluje moja wlasna funkcje ktora ma wstawic wartosc do pola.

Licze nie tylko na pomoc w rozwiazaniu ,ale na merytoryczne wytlumaczenie co, jak i czemu.

PLIK .CPP

C/C++
//---------------------------------------------------------------------------
#include <iostream>
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"


using namespace std;

TForm1 * Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1( TComponent * Owner )
    : TForm( Owner )
{
}
//---------------------------------------------------------------------------
void wstaw_liczbe()
{
    int a = 5; //deklaruje zmienna do wstawienia
    pole->Text = a; //wstawiam do edita "pole"
    cout << a;
}
void __fastcall TForm1::przyciskClick( TObject * Sender )
{
    wstaw_liczbe(); //uruchamiam funkcje "wstaw_liczbe()"
}
//---------------------------------------------------------------------------

PLIK .H

C/C++
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1
    : public TForm
{
    __published: // IDE-managed Components
    TButton * przycisk;
    TEdit * pole;
    void __fastcall przyciskClick( TObject * Sender );
private: // User declarations
public: // User declarations
    __fastcall TForm1( TComponent * Owner );
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 * Form1;
//---------------------------------------------------------------------------
#endif

Z gory dzieki sliczne.
P-163984
mateczek
» 2017-08-14 21:59:30
tak nie zadziała to się kłóci z programowaniem obiektowym. najprościej zrób z funkcji metodę klasy.

C/C++
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1
    : public TForm
{
    __published: // IDE-managed Components
    TButton * przycisk;
    TEdit * pole;
    void __fastcall przyciskClick( TObject * Sender );
private: // User declarations
    void wstaw_liczbe();
public: // User declarations
    __fastcall TForm1( TComponent * Owner );
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 * Form1;
//---------------------------------------------------------------------------
#endif

C/C++
//---------------------------------------------------------------------------
#include <iostream>
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"


using namespace std;

TForm1 * Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1( TComponent * Owner )
    : TForm( Owner )
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::wstaw_liczbe()
{
    int a = 5; //deklaruje zmienna do wstawienia
    pole->Text = a; //wstawiam do edita "pole"
    cout << a;
}
void __fastcall TForm1::przyciskClick( TObject * Sender )
{
    wstaw_liczbe(); //uruchamiam funkcje "wstaw_liczbe()"
}
P-163985
R0P
Temat założony przez niniejszego użytkownika
Niestety nie dziala
» 2017-08-14 22:16:32
Wyskakuja takie bledy.

[C++ Error] Unit1.cpp(22): E2356 Type mismatch in redeclaration of 'TForm1::wstaw_liczbe()'
[C++ Error] Unit1.h(19): E2344 Earlier declaration of 'TForm1::wstaw_liczbe()'
P-163987
mateczek
» 2017-08-14 22:20:16
to może tak ?? nie urzywam buildera ale to musi jakoś tak wyglądać.

C/C++
void TForm1::wstaw_liczbe()
{
    int a = 5; //deklaruje zmienna do wstawienia
    pole->Text = a; //wstawiam do edita "pole"
    // cout << a;
}

a komunikaty mi się wydają jakbyś miał coś zdublowane !!!
P-163988
R0P
Temat założony przez niniejszego użytkownika
Juz lepiej...
» 2017-08-14 22:24:40
Ale niestety nadal blad, tym razem chyba bez zwiazku:

[Linker Fatal Error] Fatal: Expected a file name:
P-163989
R0P
Temat założony przez niniejszego użytkownika
Nadal nic...
» 2017-08-14 22:40:36
Po stworzeniu nowego projektu i napisaniu identycznego programu (z tym ze teraz nie zmienilam nazwy pola i buttona wiec mam Edit1 i Button1) dostaje identyczny blad:

[Linker Fatal Error] Fatal: Expected a file name:

.CPP
C/C++
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 * Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1( TComponent * Owner )
    : TForm( Owner )
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click( TObject * Sender )
{
    wstaw_liczbe();
}
//---------------------------------------------------------------------------
void TForm1::wstaw_liczbe()
{
    int a = 5; //deklaruje zmienna do wstawienia
    Edit1->Text = a; //wstawiam do edita "pole"
}

.H
C/C++
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1
    : public TForm
{
    __published: // IDE-managed Components
    TEdit * Edit1;
    TButton * Button1;
    void __fastcall Button1Click( TObject * Sender );
private: // User declarations
    void wstaw_liczbe();
public: // User declarations
    __fastcall TForm1( TComponent * Owner );
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 * Form1;
//---------------------------------------------------------------------------
#endif
P-163991
mateczek
» 2017-08-15 08:09:03
weź stwórz projek pod jakąś prostą nazwą. Bez spacji polskich znaków i bez znaków specjalnych np
D:/programy/test
 i spróbuj skompilować
P-163992
« 1 »
  Strona 1 z 1