Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование консольного проекта в билдеровский 
V
    Опции темы
Metalex
Дата 13.12.2010, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Всем привет. У меня есть готовый консольный проект, откомпиленый в VS 2008, который состоит из 2х *.h - файлов, в которых хранятся обьявления классов, а в *.cpp - файле - все функции-члены этих классов, в главной функции обьявляется обьект типа класса, который записан во втором *.h файле и для него вызывается пару функций.
Куда пихать эти участки кода на билдере? И какой проект создавать?
Насколько я понял, нужно подключить *.h файлы, а функции-члены классов закинуть в Unit1.cpp? Или в __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
????

С тексбоксами и кнопками уже думаю разберусь.

Спасибо.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Artemon
Дата 13.12.2010, 09:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



В C++ Builder, есть разные типы проектов, в том числе и консольный.

Вибираешь необходимый тебе тип и подключаешь cpp и h кнему.

Если консольный, то в файле в котором у тебя будет находиться ф-ия main() - делаешь include "имя_h_файла.h"

Если GUI, то в заголовочном файле формы подключаешь "имя_h_файла.h". Далее кидаешь кнопку на форму и щелкаешь по ней дважды - тебя перекидывает в обработчик щелчка этой кнопки. Здесь ты можеь уже использовать классы/функции из подключенных тобой файлов.




--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Metalex
Дата 14.12.2010, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Код

void Vektor::input (int k)
{
        if (k==1)
        {
                x=StrToFloat(TForm1::Edit1->Text);
                y=StrToFloat(Edit2->Text);
        }
        if (k==2)
        {
                x=StrToFloat(Edit3->Text);
                y=StrToFloat(Edit4->Text);
        }
}

в чем ошибки?
Цитата

[C++ Error] Unit1.cpp(27): E2231 Member TForm1::Edit1 cannot be used without an object
[C++ Error] Unit1.cpp(28): E2451 Undefined symbol 'Edit2'
[C++ Error] Unit1.cpp(32): E2451 Undefined symbol 'Edit3'
[C++ Error] Unit1.cpp(33): E2451 Undefined symbol 'Edit4'



--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Michrutka
Дата 14.12.2010, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.2.2008

Репутация: нет
Всего: нет



Ошибка в том что Edit1 принадлежит классу TForm1.
а раз так, то к нему надо обращаться через объект это класса.
то есть:
Код

//где-то в начале cpp IDE сам пишет строчку
TForm1* Form1; // создаем указатель на объект.
...
//обращаемся к едиту
Form1->Edit1->Text = "Smth";


Это сообщение отредактировал(а) Michrutka - 14.12.2010, 11:28
PM MAIL   Вверх
Metalex
Дата 14.12.2010, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Код

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

#include <vcl.h>
#include <cmath>
#include <vector>
#include "Vektor.h"
#include "Lattice.h"
#pragma hdrstop

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


//-----------------------------------------Vektor----------------------------------
Vektor::Vektor(const Vektor& V)
{
    x=V.x;
    y=V.y;
}

void Vektor::input (int k)
{
        if (k==1)
        {
                x=StrToFloat(Form1->Edit1->Text);
                y=StrToFloat(Form1->Edit2->Text);
        }
        if (k==2)
        {
                x=StrToFloat(Form1->Edit3->Text);
                y=StrToFloat(Form1->Edit4->Text);
        }
}

void Vektor::output ()
{
                   //--------
}

Vektor operator * (float m, Vektor b)
{
    Vektor temp;
    temp.x = m*b.x;
    temp.y = m*b.y;
    return temp;
}

Vektor operator + (Vektor a, Vektor b)
{
    Vektor temp;
    temp.x = a.x+b.x;
    temp.y = a.y+b.y;
    return temp;
}

Vektor operator - (Vektor a, Vektor b)
{
    Vektor temp;
    temp.x = a.x-b.x;
    temp.y = a.y-b.y;
    return temp;
}

Vektor Vektor::operator += (Vektor b)
{
    x += b.x;
    y += b.y;
    return *this;
}

Vektor Vektor::operator = (Vektor b)
{
    x = b.x;
    y = b.y;
    return *this;
}
//-----------------------------------------End Vektor---------------------------------

//-----------------------------------------to Vektor----------------------------------
float vect_proizv (Vektor a, Vektor b)
{
    return a.x*b.x+a.y*b.y;
}

float abs_vel (Vektor a)
{
    return sqrt(pow(a.x, 2)+pow(a.y, 2));
}

float Mm (Vektor Basis_i, Vektor GSo_Basis_j)
{
    return vect_proizv(Basis_i, GSo_Basis_j)/vect_proizv(GSo_Basis_j, GSo_Basis_j);
}
//---------------------------------------end to Vektor--------------------------------

//*************************************** Lattice ************************************
Lattice::Lattice ()
{
    n=2;
}

void Lattice::SetBasis ()
{
    for (int i=0; i<n; i++)
    {
        Vektor temp;
                int ik=i+1;
        temp.input (ik);
        Basis.push_back (temp);
        GSo_Basis.push_back (temp);
        LLL_redused.push_back (temp);
    }
}

void Lattice::ShowBasis ()
{/*
    for (int i=0; i<n; i++)
        Basis[i].output ();    */
}

void Lattice::GSo ()
{
    GSo_Basis[0]=LLL_redused[0]; //1 элемент
    Vektor Suma;
    int i, j;
    for (i=1; i<n; i++)
    {
        for (j=0; j<i; j++)
        {
            Suma+=Mm(LLL_redused[i], GSo_Basis[j])*GSo_Basis[j];
        }
        GSo_Basis[i]=LLL_redused[i]-Suma;
    }
}

void Lattice::ShowGSo ()
{          /*
    cout<<"Ортогонализированный базис по методу Грама-Шмидта"<<endl;
    for (int i=0; i<n; i++)
        GSo_Basis[i].output ();  */
}

int Lattice::LLL ()
{
    float s=0.75;
    int i, j;

    GSo();
    for (i=1; i<n; i++)
        for (j=i-2; j>=0; j--)
            LLL_redused[i]=LLL_redused[i]-Mm(LLL_redused[i], GSo_Basis[j])*LLL_redused[j];

    for (i=0; i<n-1; i++)
        if (s*pow(abs_vel(GSo_Basis[i]), 2) > pow(abs_vel(Mm(LLL_redused[i+1], GSo_Basis[i])*GSo_Basis[i]+GSo_Basis[i+1]), 2))
        {
            Vektor temp = LLL_redused[i];
            LLL_redused[i]=LLL_redused[i+1];
            LLL_redused[i+1]=temp;
            return 1;
        }

    return 0;
}

void Lattice::ShowLLLredused ()
{        /*
    cout<<"LLL-редуцированый базис"<<endl;
    for (int i=0; i<n; i++)
        LLL_redused[i].output ();    */
}
//************************************* End Lattice ******************************************


TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        Lattice lattice;
        lattice.SetBasis ();
    lattice.ShowBasis ();
        
    int k=1;
    while (k==1)
    {
        k=lattice.LLL ();
    }
    lattice.ShowLLLredused ();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Click(TObject *Sender)
{
if (Edit1->Text == "Введите x")
        Edit1->Text = "";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    //обработка ввода
}
//---------------------------------------------------------------------------



c input ругается причем неивестно что...

И еще, как проверить, действительно ли в Edit1 введено число?


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Metalex
Дата 15.12.2010, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



user posted image


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Michrutka
Дата 15.12.2010, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.2.2008

Репутация: нет
Всего: нет



проверить введено ли число можно так:
Код

try
{
    int i = StrToInt(Edit1->Text);
}
catch(EConvertError& e)
{
   //сюда он вывалиться если не сможет преобразовать, а значит там не инт.
}


где именно ошибка с input?
что пишет?
на какой строчке возникает представленная ошибка?

Это сообщение отредактировал(а) Michrutka - 15.12.2010, 11:16
PM MAIL   Вверх
Metalex
Дата 15.12.2010, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Цитата(Michrutka @  15.12.2010,  11:05 Найти цитируемый пост)
можно так:

но у меня вводится флоат.
Цитата(Michrutka @  15.12.2010,  11:05 Найти цитируемый пост)
где именно ошибка с input?что пишет?на какой строчке возникает представленная ошибка?

пишет то, что я выложил сверху (скрин), ошибка возникает когда я нажимаю кнопку. Выделяет эту строку:
Код

temp.input (ik);



--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Michrutka
Дата 15.12.2010, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.2.2008

Репутация: нет
Всего: нет



float, так float
Код

float f = 0.;
try
{
    f = StrToFloat(Edit1->Text);
}
catch(EConvertError& e)
{
   //сюда он вывалиться если не сможет преобразовать, а значит там не float.
}
//используй f как хочешь
...


на счет ошибки - перенеси определение Form1 на самый верх юнита:
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#include <cmath>
#include <vector>
#include "Vektor.h"
#include "Lattice.h"
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//===================================Вот сюда============================
TForm1 *Form1;

//-----------------------------------------Vektor----------------------------------
Vektor::Vektor(const Vektor& V)
{
    x=V.x;
    y=V.y;
}
...


Это сообщение отредактировал(а) Michrutka - 15.12.2010, 23:48
PM MAIL   Вверх
Metalex
Дата 16.12.2010, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Michrutka, в очередной раз спасибо. Ошибку при некорректном вводе отлавливает, все нормально, но выбивает вот что:
user posted image
как с этим боротся?


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Michrutka
Дата 16.12.2010, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.2.2008

Репутация: нет
Всего: нет



Если эта ошибка возникает на строчке 
Код

f = StrToFloat(Edit1->Text);

 
в try-catche то это нормально, в случае если у тебя ошибка при конвертации
компилятор это отлавливает, выдает ошибку и вываливается в catch
в экзешнике (то есть если ты запустишь сам экзешник, а не через IDE) такого не будет

для того собственно и нужен try-catch

такая ошибка возможна в случае если например ты суешь функции не число или число но не с тем разделителем целой и дробной части.
чтобы избежать этой ошибки юзай 
DecimalSeparator
в этой переменной типа char хранится разделитель, кот используется в системе.

просто проверяй строчку на символ отличный от этого знака и меняй его
то есть:

Код

String sFloat = "789.5";
String sSearch = (DecimalSeparator == ',') ? "." : ",";
int iPos = sFloat.Pos(sSearch);
if (iPos != 0)
{
    sFloat [iPos] = DecimalSeparator;
}

float f = 0.;
try
{
    f = StrToFloat(sFloat);
}
catch(EConvertError& e)
{
   //сюда он вывалиться если не сможет преобразовать, а значит там не float.
}


так можно уйти от этой ошибки.

ну а если ошибка в другой строчке - давай сюда эту строчку)

Это сообщение отредактировал(а) Michrutka - 16.12.2010, 10:50
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.