С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Master_Yi
13 / 10 / 3
Регистрация: 22.12.2013
Сообщений: 377
1

Функция в заголовочном файле

13.12.2014, 12:30. Просмотров 632. Ответов 10
Метки нет (Все метки)

Передача данных в заголовочный файл для обсчета:
Я создал переменную типа данных класса:
C++
1
2
C Boris;
Boris.movefirmdown(Form1->Image1-Top, Form1->Image2-Top, 100);
И в заголовочном файле функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class C
{
public:
C() {}
~C() {}
int i;
void movefirmdown(Form1 *F1,Form1*F2,Form1 *F3) {
for (i=1; i<=F3; i++) {
Sleep(10);
F1=F1+1;
F2=F2+1;
}
Ругается на void movefirmdown(Form1 *F1
И пишет при этом:
[C++ Error] Unit1.h(24): E2293 ) expected
Все скобки открыты и закрыты правильно, в чем проблема?

Благодарю за внимание!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2014, 12:30
Ответы с готовыми решениями:

Прототип функции в заголовочном файле
Всем привет. Если объявляю прототип функции в заголовочном файле, пишет ошибку:...

Region и End_Region в заголовочном файле
Доброго времени суток! Очень нужна помощь по блокам: #pragma region name...

В каком заголовочном файле находится delay (BCB6)?
В справочной системе C++ Builder 6 Нашел вот этот пример использования функции...

Функции, которые оперируют с элементами формы в заголовочном файле
Собственно, что нужно подключить, чтобы заголовочный файл видел мою форму?...

Инициализация полей объекта в заголовочном файле против списка инициализации
Говорят, что делать так не хорошо //.h class Foo { int intField...

10
Витальич
1272 / 1182 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
13.12.2014, 12:51 2
Описание класса заканчивается символом ";"
C++
1
2
3
4
5
6
7
8
9
10
11
12
class C
{
public:
C() {}
~C() {}
int i;
void movefirmdown(Form1 *F1,Form1*F2,Form1 *F3) {
for (i=1; i<=F3; i++) {
Sleep(10);
F1=F1+1;
F2=F2+1;
};
1
Master_Yi
13 / 10 / 3
Регистрация: 22.12.2013
Сообщений: 377
13.12.2014, 12:58  [ТС] 3
Витальич, Спасибо но проблема все еще есть...
[C++ Error] Unit1.h(27): E2293 ) expected
0
D1973
Модератор
3679 / 2653 / 1292
Регистрация: 21.01.2014
Сообщений: 11,246
Записей в блоге: 3
Завершенные тесты: 1
13.12.2014, 13:07 4
Цитата Сообщение от Master_Yi Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
class C
{
public:
C() {}
~C() {}
int i;
void movefirmdown(Form1 *F1,Form1*F2,Form1 *F3) {
for (i=1; i<=F3; i++) {
Sleep(10);
F1=F1+1;
F2=F2+1;
}
или ты не весь код привел, или скобки все-таки не все...
0
Витальич
1272 / 1182 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
13.12.2014, 13:22 5
Упс, посмотрел внимательней, в классе много ошибок:
Цитата Сообщение от D1973 Посмотреть сообщение
F1=F1+1;
Как к классу Form1 прибавить 1 ????
Цитата Сообщение от D1973 Посмотреть сообщение
void movefirmdown(Form1 *F1,Form1*F2,Form1 *F3)
Цитата Сообщение от Master_Yi Посмотреть сообщение
Boris.movefirmdown(Form1->Image1-Top, Form1->Image2-Top, 100);
В F3 Вы что передаёте?
Да и скобок не хватает.
К тому же так делать идеологически не правильно.

ТС, опишите словами что Вы хотите получить в этоге.
1
Master_Yi
13 / 10 / 3
Регистрация: 22.12.2013
Сообщений: 377
13.12.2014, 14:58  [ТС] 6
Витальич,
Моя задача сделать так что бы при клике на кнопку, создаваемую прямиком в программе, происходило действие.
Задал я кнопки так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  for(i=0;i<18;i++)
  {
if (i==16) {
        test[i] = new C;
        test[i]->val=i;
        test[i]->btn = new TButton(this);
        test[i]->btn->Caption = B[i];
        test[i]->btn->Width=449;
        test[i]->btn->Height=33;
        test[i]->btn->Top=fftop;
        test[i]->btn->Left=ffleft;
        test[i]->btn->Parent = this;
        test[i]->btn->OnClick=test[i]->show;
        fftop = fftop + test[i]->btn->Height + 7;
 
}
else if (i==17) {
        test[i] = new C;
        test[i]->val=i;
        test[i]->btn = new TButton(this);
        test[i]->btn->Caption = B[i];
        test[i]->btn->Width=449;
        test[i]->btn->Height=33;
        test[i]->btn->Top=fftop;
        test[i]->btn->Left=ffleft;
        test[i]->btn->Parent = this;
        test[i]->btn->OnClick=test[i]->show;
}
else {
if (ff==0) {
        test[i] = new C;
        test[i]->val=i;
        test[i]->btn = new TButton(this);
        test[i]->btn->Caption = B[i];
        test[i]->btn->Width=217;
        test[i]->btn->Height=33;
        test[i]->btn->Top = fftop;
        test[i]->btn->Left = ffleft;
        test[i]->btn->Parent = this;
        test[i]->btn->OnClick=test[i]->show;
        ffleft=ffleft+test[i]->btn->Width+15;
        ff=1;
   }
else if (ff==1) {
        test[i] = new C;
        test[i]->val=i;
        test[i]->btn = new TButton(this);
        test[i]->btn->Caption = B[i];
        test[i]->btn->Width=217;
        test[i]->btn->Height=33;
        test[i]->btn->Top = fftop;
        test[i]->btn->Left = ffleft;
        test[i]->btn->Parent = this;
        test[i]->btn->OnClick=test[i]->show;
        fftop = fftop+test[i]->btn->Height+7;
        ffleft = 312;
        ff=0;
   }}
}

В данный момент при нажатии на 3 первых кнопки происходит действие - выводит ShowMessage с текстом:
Тобишь файлик Unit1.h выглядит так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
 
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TImage *Image1;
        TImage *Image2;
        TEdit *Edit1;
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
 
class C
{
public:
C() {}
~C() {}
int i;
void movefirmdown(Form1 *F1,Form1*F2,Form1 *F3) {
for (i=1; i<=F3; i++) {
Sleep(10);
F1=F1+1;
F2=F2+1;
}};
int val;
 
TButton *btn;
 
 
void __fastcall show(TObject *Sender)
 
{
switch(val)
   {
     case 0 :
break;
     case 1 :
//Edit1->Text="fff";
ShowMessage("111");
break;
     case 2 :
ShowMessage("222");
break;
     case 3 :
ShowMessage("333");
break;
}}
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Что это должно быть:
При нажатии на кнопку вызывается одна из 4-х функций. Функция движения первой картинки вверх/вниз, второй картинки вверх/вниз.
Я думал это реализовать через ту функцию что я написал выше: movefirmdown
Но это явно неправильно.
Как сделать так что бы при нажатии на кнопку, созданную в коде происходил ивент, который в зависимости от номера кнопки(case идеально подходит) вызывались 2 разных функции. Функция движения одной картинки вниз и второй например, вверх?
У меня уже сделано до того момента что case срабатывает на правильную кнопку, тобишь val отвечает за номер кнопки. От вас я прошу помощи в создании функции(метода) и ее вызова через case в заголовочном файле.
0
Витальич
1272 / 1182 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
13.12.2014, 16:09 7
Цитата Сообщение от Master_Yi Посмотреть сообщение
что бы при клике на кнопку, создаваемую прямиком в программе
Я же написал в другом Вашем посте как это сделать.
0
Master_Yi
13 / 10 / 3
Регистрация: 22.12.2013
Сообщений: 377
13.12.2014, 16:35  [ТС] 8
Витальич, Можно ссылку на пост?
0
Витальич
1272 / 1182 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
13.12.2014, 16:55 9
Лучший ответ Сообщение было отмечено Master_Yi как решение

Решение

Присвоение Event`a через код
1
Fulcrum_013
1481 / 1119 / 131
Регистрация: 14.12.2014
Сообщений: 9,554
Завершенные тесты: 3
14.12.2014, 11:29 10
Цитата Сообщение от Master_Yi Посмотреть сообщение
[C++ Error] Unit1.h(27): E2293 ) expected
Правильно ругается. Form1 экземпляр класса TForm1 а не тип данных.

Добавлено через 3 часа 12 минут
Цитата Сообщение от Master_Yi Посмотреть сообщение
C++
1
2
C Boris;
Boris.movefirmdown(Form1->Image1-Top, Form1->Image2-Top, 100);
И в заголовочном файле функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class C
{
public:
C() {}
~C() {}
int i;
void movefirmdown(Form1 *F1,Form1*F2,Form1 *F3) {
for (i=1; i<=F3; i++) {
Sleep(10);
F1=F1+1;
F2=F2+1;
}
вобщем переделать так:
в хидере:
C++
1
2
3
4
5
6
7
class C
{
public:
C() {}
~C() {}
void __fastcall movefirmdown(TImage *,TImage *,int) ;
};
В сpp
C++
1
2
3
4
5
6
7
8
void __fastcall C::movefirmdown(TImage * img1,TImage * img2,int Limit) ;
{
   for (img1->Top=1; img1->Top<=Limit; img1->Top++,img2->Top++){
         Sleep(10);        
         img1->Refresh();
         img2->Refresh();
   } 
}
PS: В нашем ликбезе однако C++ похоже лучше читали чем в вашем

Добавлено через 10 минут
PPS: ну а ежели вообще по уму делать то так : на Form1 добавить таймер, настроить интервал 10мс; в обработчике таймера:
C++
1
2
3
4
5
void __fastcall TForm1::Timer1OnTimer(TComponent *Sender){
       Image1->Top++;
       Image2->Top++;
       if (Image1->Top>=Limit) Timer1->Enabled=false; 
}
В месте запуска соответственно (В любом из методов TForm1);
Limit=100; /для примера;
Timer1->Enabled=true;
в заголовок TForm1 добавит
int Limit;
0
BRcr
16.12.2014, 22:58     Функция в заголовочном файле
  #11
 Комментарий модератора 
Все, здесь с оффтопом завязываем.
0
16.12.2014, 22:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2014, 22:58
Привет! Вот еще темы с ответами:

Как использовать экземпляр класса, объявленный в одной файле, в другом файле?
В первой форме я создал класс TBook и массив экземпляров этого класса TBook...

Функция CM_Request_Device_Eject из SETUPAPI.dll. Ошибка - неизвестная функция.
нужна ваша помощь есть функция CM_Request_Device_Eject при компиляции RAD 2010...

С - С++ enum в заголовочном файле
ситуация примерно такая компилятор gcc есть заголовочный файл в нем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru