Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Ошибка E2235 Member function must be called ...


Автор: Niakita 17.5.2012, 17:31
При компиляции проекта выскакивает ошибка [BCC32 Error] Unit1.cpp(58): E2235 Member function must be called or its address taken

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(!Table1->Active)
  Table1->Active=true;
Table1->Append();
Table1->FieldByName("EmployeeKod")->AsString=Edit4->Text;
Table1->FieldByName("Name")->AsString=Edit1->Text;

Table1->FieldByName("OneDayRate")->AsFloat=StrToFloat(Edit2->Text);

Table1->FieldByName("Tax")->AsFloat=StrToFloat(Edit3->Text);

Table1->Post();
  Edit1->Clear; // ОШИБКА
   Edit2->Clear; // ОШИБКА
    Edit3->Clear; // ОШИБКА
     Edit4->Clear; // ОШИБКА
Edit4->SetFocus();  
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
 Form1->Close; // ОШИБКА
}
//---------------------------------------------------------------------------



Весь код:

Код

//---------------  Расчёт заработной платы Unit1.cpp ------------- //

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//#include "Unit1_WorkWithTTable.h"

//-------------------------------------------------------//

#pragma package (smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;

//Функция расчёта заработной платы одного работника //

float Sal (float OneDayRate, float Tax, float AmountDays)
// OneDayRate -  ставка одного дня,
// Tax - процент налога,
// AmountDays - количество отработанных дней

{
return (OneDayRate * AmountDays * (1-Tax/100));
}

//--------------------------------------------------//

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{

}


//--------------------------------------------------------------------//

void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
if (Key==VK_RETURN)
Edit2->SetFocus();
}
//--------------------------------------------------------------//

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(!Table1->Active)
  Table1->Active=true;
Table1->Append();
Table1->FieldByName("EmployeeKod")->AsString=Edit4->Text;
Table1->FieldByName("Name")->AsString=Edit1->Text;

Table1->FieldByName("OneDayRate")->AsFloat=StrToFloat(Edit2->Text);

Table1->FieldByName("Tax")->AsFloat=StrToFloat(Edit3->Text);

Table1->Post();
  Edit1->Clear; // ОШИБКА
   Edit2->Clear; // ОШИБКА
    Edit3->Clear; // ОШИБКА
     Edit4->Clear; // ОШИБКА
Edit4->SetFocus();  
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Edit2KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 if (Key==VK_RETURN)
Edit3->SetFocus(); 
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Edit3KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 if(Key== VK_RETURN)
 Button1->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit4KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key== VK_RETURN)
Edit1->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit5KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key==VK_RETURN)
Edit6->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit6KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key == VK_RETURN)
Button2->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  /* Сначала свойство AutoCalcFields устанавливается в fals (отключает) событие
OnCalcFields (это будет иметь эффект, когда таблица неактивна, иначе событие 
OnCalcFields всё равно возникает. После нахождения требуемой записи свойство включает событие,
чтобы можно было обработать вычислимое поле */


if (!Table1->Active) 
 Table1->Active=true;
TLocateOptions Options;
/* TLocateOptions -  это псевдоним (typedef) специального класса-шаблона Set, у которого есть операция
 "<<" (включить в экземпляр Set:) (в данном случае экземпляром является Options). Поэтому ниже Options
 добавляются режимы loPartialKey  и loCaseInsensitive. Предварительно Options  очищается */
 
Options.Clear();
Options << loPartialKey << loCaseInsensitive;
/* поиск по частичному совпадению ключа, регистры символов не имеют значения.
Edit2; Edit4 - это соответственно поля поиска по конъюнкции со значениями этих полей */

if (!Table1->Locate("EmployeeKod", Edit5->Text,Options))
// здесь указывается имя значения поля //
ShowMessage("Не найдено поле с табельным номером" + Edit5->Text);
else
 {
  Table1->Edit();
  Table1->FieldByName("AmountDays")->AsFloat=StrToFloat(Edit6->Text);
  Table1->FieldByName("Salary")->AsFloat=Sal(Table1->FieldByName("OneDayRate")->AsFloat, 
  Table1->FieldByName("Tax")->AsFloat,
  StrToFloat(Edit6->Text));
  Table1->Post();
 }    
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
Table1->Open();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
  Form1->Close; // ОШИБКА
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
/* Здесь не применяется метод EmptyTable(), т.к. он требует соблюдения
довольно жестких условий и поэтому не всегда проходит */
if(!Table1->Active)
Table1->Active=true;
while(!Table1->Eof)
  Table1->Delete();
Table1->Close();
}
//---------------------------------------------------------------------------






Списал с учебника.
*dfm файла не было - компоненты на форме расположил по картинке.

Вопрос:
- по какой причине возникает ошибка [BCC32 Error] Unit1.cpp(58): E2235 Member function must be called or its address taken?
- как её устранить?

Автор: borisbn 17.5.2012, 17:46
Цитата(Niakita @  17.5.2012,  17:31 Найти цитируемый пост)
Edit4->SetFocus(); 

вот здесь ты правильно вызываешь функцию SetFocus
Цитата(Niakita @  17.5.2012,  17:31 Найти цитируемый пост)
Edit4->Clear; // ОШИБКА

а здесь функцию Clear - нет.
Поищи внимательно разницу

Автор: Niakita 17.5.2012, 18:04
Спасибо - нашёл

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)