ďťż

Ładny brzuch

mam problemik taki, ze wywoulje mi blad:
[C++ Error] Unit2.cpp(34): E2314 Call of nonfunction

w lini:
wpisz<<zapis.imie(main->lblImie->Text) << "" << zapis.nazwisko(main->lblNazwisko->Text) << " " <<zapis.telefon(main->lblTelefon->Text);

na swojej formie mam label (lblimie) , label (lblNazwisko), label (lblTelefon) i button (Dodaj), po wpisaniu w labelki danych i kliknieciu Dodaj chce aby utworzyl sie plik tekstowy typu doc i wkleily sie dane z labelkow jaki blad popelniam??

chcialem mu pokazac w tych liniach, ze zmienna Imie, Nazwisko i telefon to tekst z labelkow:
wpisz<<zapis.imie(main->lblImie->Text) << "" << zapis.nazwisko(main->lblNazwisko->Text) << " " <<zapis.telefon(main->lblTelefon->Text);

probowalem juz roznych kombinacji, udalo mi sie dojsc do moemntu, ze pwostal plik, ale nic w nim nie zapisalo, bez wskazywania na labelki, prosze o pomoc..jak mam zrobic, zeby on bral ten tekst z labelkow ??
[code]#include <vcl.h> #include <stdio.h> #include <iostream.h> #include <fstream.h> #pragma hdrstop #include "Unit2.h" #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" using namespace std; struct Osoba{ string imie; string nazwisko; string telefon; void dodaj(); } zapis, odczyt; void Osoba::dodaj() { ofstream wpisz; wpisz.open("C:/dane.doc", ios::app); wpisz.seekp(0, ios::end); wpisz<<zapis.imie(main->lblImie->Text) << "" << zapis.nazwisko(main->lblNazwisko->Text) << " " <<zapis.telefon(main->lblTelefon->Text); wpisz.close(); } Tmain *main; //--------------------------------------------------------------------------- __fastcall Tmain::Tmain(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall Tmain::btnDodajClick(TObject *Sender) { { struct Osoba osoba; cin>>osoba.imie; cin>>osoba.nazwisko; cin>>osoba.telefon; osoba.dodaj(); } } //---------------------------------------------------------------------------
Użytkownik st95223619330 edytował ten post 16 listopad 2008, 21:23


czy moglby ktos odpowiedziecc ?:<

Oczywiście że ktoś może :)

1. Plik doc to nie jest zwykły plik tekstowy tylko format binarny obsługiwany przez Worda. Można pewnie obsługiwać takie pliki przez jakieś ActiveX (tutaj strzelam) lub łatwiej z poziomu platformy .NET. Co nie zmienia faktu, że chyba jest Ci to zbędne.

2. Zwróć uwagę, że typ zmiennych w strukturze różni się od tych jakie są przechowywane wewnątrz Label (std::string != AnsiString). Można to oczywiście dość prosto obejśćstring imie = lbl->Text.c_str();Ale bardzo możliwe, że siadą wtedy polskie znaki diakrytyczne.

3. Istnienie globalnych instancji zapis i odczyt praktycznie mija się z celem. Np. zapis jest tylko pomostem konwertującym, żebyś mógł korzystać z operatora << dla strumienia. Zauważ, że faktycznie jest to zbędne. Pominę kwestię zasad pisania programów obiektowych, ale jak już uzyskasz char* z AnsiString::c_str() to spokojnie możesz wrzucić tablicę do strumienia i będzie hulać.

4. Kod zawarty w btnDodajClick jest praktycznie również bez sensu. Wnioskuję, że jeżeli posiadasz Label na formie (czyli jakieś GUI) to dostępu do zczytywania z std::cin jest Ci kompletnie zbędny . Albo GUI albo konsola. Jasne, można zagwarantować i to i to, ale po co? :)
Użytkownik reVis edytował ten post 18 listopad 2008, 10:36
wywala mi 3 bledy w tych zmiennych:
[C++ Error] Unit2.cpp(19): E2233 Cannot initialize a class member here [C++ Error] Unit2.cpp(20): E2233 Cannot initialize a class member here [C++ Error] Unit2.cpp(21): E2233 Cannot initialize a class member here
ze wskazaniem na te zmienne..
string imie = lblImie->Text.c_str(); string nazwisko = lblNazwisko->Text.c_str(); string telefon = lblTelefon->Text.c_str();
aha no i tak btw to nie sa labbele tylko edity :), ale chyba i tak nic sie nie zmieni ? ;p
Użytkownik st95223619330 edytował ten post 19 listopad 2008, 00:53


Jeśli zrobiłeś tak:

struct Osoba { string imie = lblImie->Text.c_str(); string nazwisko = lblNazwisko->Text.c_str(); string telefon = lblTelefon->Text.c_str(); };
To błędy są jak najbardziej na miejscu. Nie można w taki sposób inicjalizować pól klasy (albo struktury).

Zmienne zapis i odczyt nie są Ci do niczego potrzebne. Możesz zrobić tak:

string imie = lblImie->Text.c_str(); string nazwisko = lblNazwisko->Text.c_str(); string telefon = lblTelefon->Text.c_str(); wpisz << imie << " " << nazwisko << " " << telefon << endl;
Użytkownik Kozack edytował ten post 19 listopad 2008, 03:09
no a ja jednak uparl bym sie za pomoca struktury ?:>

skoror nie moge tego zadeklarowac wewnatrz sttruktury to jak inaczej ?

Zajrzyj do dobrego kursu albo książki o C++ (np. Symfonia C++), bo tworzenie i zapisywanie struktur do plików to podstawy, które znajdziesz właśnie tam.

Możesz zrobić tak:

Osoba osoba; osoba.imie = lblImie->Text.c_str(); osoba.nazwisko = lblNazwisko->Text.c_str(); osoba.telefon = lblTelefon->Text.c_str();
Tylko po co skoro i tak musisz pojedyńczo zapisywać imię, nazwisko i telefon do pliku:

wpisz << osoba.imie << " " << osoba.nazwisko << " " << osoba.telefon << endl;
Musiałbyś przeładować operator <<, aby możliwe było napisanie:

wpisz << osoba << endl;
EDIT: Literówki.
Użytkownik Kozack edytował ten post 25 listopad 2008, 18:11
chciałbym dokończyć jednak ten program i czuję, że jestem blisko, ale wyskakuje błąd:
[C++ Error] Unit2.cpp(18): E2233 Cannot initialize a class member here
przy zmiennych w strukturze..

oto cały kod

#include <vcl.h> #include <stdio.h> #include <iostream.h> #include <fstream.h> #pragma hdrstop #include "Unit2.h" #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" using namespace std; struct Osoba{ string imie = lblImie->Text.c_str(); string nazwisko = lblNazwisko->Text.c_str(); string telefon = lblTelefon->Text.c_str(); void dodaj(); } zapis. odczyt; void Osoba::dodaj() { ofstream wpisz; wpisz.open("C:/dane.txt", ios::app); wpisz.seekp(0, ios::end); wpisz<<zapis.imie << "" << zapis.nazwisko << " " <<zapis.telefon; wpisz.close(); } Tmain *main; //--------------------------------------------------------------------------- __fastcall Tmain::Tmain(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall Tmain::btnDodajClick(TObject *Sender) { { struct Osoba osoba; cin>>osoba.imie; cin>>osoba.nazwisko; cin>>osoba.telefon; osoba.dodaj(); } } //---------------------------------------------------------------------------
Użytkownik st95223619330 edytował ten post 25 listopad 2008, 11:49
Drugi raz zadajesz to samo pytanie. Przeczytaj jeszcze raz moje posty.
Użytkownik Kozack edytował ten post 25 listopad 2008, 18:16
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •