Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2011, 19:51   #11
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
Сообщение

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Как-то Вы странно класс пишете.
А что не так с моим классом? Он ещё не закончен, поэтому там нет деструктора и т.п.

Вообще, в итоге должен получиться калькулятор, поэтому пока событие происходит при нажатии кнопки на форме (можно просто кинуть BitBin1, и всё должно работать). Внизу прикреплён архив с проектом.

TPNumber.h
Код:
#include <vcl.h>
class TPNumber
{
   float n;
   int b;
   int c;


   public:

      //float PNum;

     TPNumber (float num=0, int sys=0, int precision=0);
     TPNumber (AnsiString snum,AnsiString ssys, AnsiString spr);

     TPNumber Copy();
     TPNumber Sum(TPNumber operand);
     TPNumber Multiply(TPNumber operand);
     TPNumber Subtraction(TPNumber operand);
     TPNumber Divide(TPNumber operand);

     float GetNumber();
     int GetSystem();
     int GetPrecision();
     void Display();

     bool Compare(TPNumber operand, AnsiString operation);

     __property float PNum = (read = GetNumber);
};
TPNumber.cpp
Код:
#include <TPNumber.h>
//#include "Global.cpp"
#include <iostream.h> //для корректного перевода строки в число    
#include <stdio.h>
#include <windows.h> //для месседжбокса
#include <except.h>
#include <vcl.h> //для ансистринг

//#include <stdlib.h>
//#include <conio.h>

TPNumber::TPNumber(float num, int sys, int precision)
 {
    n=num;
    b=sys;
    c=precision;
 };

TPNumber::TPNumber (AnsiString snum, AnsiString ssys, AnsiString spr)
{
   //MessageBox(NULL,"1","ОК",MB_OK);

   //переведём само число
   try
   {
      //MessageBox(NULL,"2","ОК",MB_OK);
      n=snum.ToDouble();
   }
   catch( EConvertError &e )
   {
      //MessageBox(NULL,"3","ОК",MB_OK);
      n = 0;
      ShowMessage("Строка в переменной snum числа не содержит "+snum);
   };

   //переведём систему счисления
   try
   {
      //MessageBox(NULL,"2","ОК",MB_OK);
      b=ssys.ToInt();
   }
   catch( EConvertError &e )
   {
      //MessageBox(NULL,"3","ОК",MB_OK);
      b = 0;
      ShowMessage("Строка в переменной ssys числа не содержит "+ssys);
   };
   if ((b<=0) || (b>16)) ShowMessage("Некорректная система счисления");

   try
   {
      //MessageBox(NULL,"2","ОК",MB_OK);
      c=spr.ToInt();
   }
   catch( EConvertError &e )
   {
      //MessageBox(NULL,"3","ОК",MB_OK);
      c = 0;
      ShowMessage("Строка в переменной spr числа не содержит "+spr);
   };
   if (c<0)
   {
      c = 0;
      ShowMessage("Некорректная точность "+spr);
   }
};

TPNumber TPNumber::Copy()
{
   TPNumber pnum(GetNumber(),GetSystem(),GetPrecision());
   return pnum;
};

TPNumber TPNumber::Sum(TPNumber operand)
{
};

TPNumber TPNumber::Multiply(TPNumber operand)
{

};

TPNumber TPNumber::Subtraction(TPNumber operand)
{
   
};

TPNumber TPNumber::Divide(TPNumber operand)
{
  
  
};

void TPNumber::Display()
{
   //MessageBox(NULL,"Число "+FloatToStr(n)+"/nСистема счисления "+IntToStr(b)+"/nТочность "+IntToStr(c),"ОК",MB_OK);

   ShowMessage("Число "+FloatToStr(n)+"; Система счисления "+IntToStr(b)+"; Точность "+IntToStr(c));
};

float TPNumber::GetNumber()
{
   return n;
};

int TPNumber::GetSystem()
{
   return b;
};

int TPNumber::GetPrecision()
{
   return c;
};

bool TPNumber::Compare(TPNumber operand, AnsiString operation)
{
   if ( operand.GetSystem() != GetSystem())
   {
      ShowMessage("У операндов разные системы счисления.Операция "+operation+" не выполнена");
      return false;
   };

   if (operand.GetPrecision() != GetPrecision())
   {
      ShowMessage("У операндов разная точность. Операция "+operation+" не выполнена");
      return false;
   };

   return true;
};
Main.cpp
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include "TPNumber.cpp"
#pragma hdrstop

#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFMain *FMain;
 //---------------------------------------------------------------------------
__fastcall TFMain::TFMain(TComponent* Owner)
        : TForm(Owner)
{

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




void __fastcall TFMain::BitBtn1Click(TObject *Sender)
{
  //TPNumber x("0","16","0");
  //x.Display();
  //MessageBox(NULL,"Строка переведена","ОК",MB_OK);

  /*TPNumber y;
  y=x.Copy();
  y.Display();*/

  TPNumber z(125,16,0);
  //z.Display();

  //TPNumber m=x.Sum(z);
  //TPNumber m=x.Multiply(z);
  //TPNumber m=x.Subtraction(z);
  //TPNumber m=x.Divide(z);
  //m.Display();

  float a;
  a=z.PNum;
};
//---------------------------------------------------------------------------
Вложения
Тип файла: rar 11.04 свойства.rar (798.9 Кб, 6 просмотров)

Последний раз редактировалось teapot; 11.04.2011 в 19:55.
teapot вне форума Ответить с цитированием
Старый 11.04.2011, 19:58   #12
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

[C++ Error] Main.cpp(45): E2316 'Num' is not a member of 'TPNumber'
Ошибка в 45-й строке. А приведено строк 35. Вот и не понятно где она.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.04.2011, 20:03   #13
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Ошибка в 45-й строке. А приведено строк 35. Вот и не понятно где она.
У меня [C++ Error] Main.cpp(43): E2316 'PNum' is not a member of 'TPNumber', и строка действительно 43-я (он же пустые тоже считает)
teapot вне форума Ответить с цитированием
Старый 11.04.2011, 21:02   #14
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Вот и не понятно где она.
Я дико извиняюсь. Вчера заметила, что в строке
__property float PNum = {read = GetNumber};
вместо фигурных скобок стоят круглые. Исправила, сохранила. А сейчас смотрю - снова круглые... Опять исправила. Теперь работает.

Спасибо большое всем за участие! Ещё раз извиняюсь
teapot вне форума Ответить с цитированием
Старый 11.04.2011, 21:15   #15
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

У меня в обоих билдерах пишет [C++ Error] TPNumber.h(29): E2275 { expected
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.04.2011, 21:28   #16
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
У меня в обоих билдерах пишет [C++ Error] TPNumber.h(29): E2275 { expected
вот! у меня тоже выпала эта ошибка (впервые за два дня), я исправила скобки на фигурные, и программа запустилась. Спустя секунду запускаю снова - опять E2316 'PNum' is not a member of 'TPNumber', про скобку уже не спрашивает. Непонятно
teapot вне форума Ответить с цитированием
Старый 11.04.2011, 21:34   #17
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
По умолчанию

У меня такое ощущение, что он вообще h-файл не проверяет на синтаксические ошибки. Даже если одну из скобок в __property вообще убрать, он это пропускает и выдаёт прежнюю ошибку.
teapot вне форума Ответить с цитированием
Старый 11.04.2011, 21:40   #18
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
У меня в обоих билдерах пишет [C++ Error] TPNumber.h(29): E2275 { expected
а как Вы добились, чтобы перестала появляться прежняя ошибка?
teapot вне форума Ответить с цитированием
Старый 11.04.2011, 21:51   #19
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Да в общем то никак. Поставил фигурные скобки и всё заработало.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.04.2011, 22:08   #20
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
По умолчанию

Тут, оказывается, вот в чём дело. Я всё же девушка) поэтому, когда мне нужно сделать резервную копию моего проекта, я просто копирую папку с пректом, называю её по-другому и дальше продолжаю работать в ней. Так вот, мой проект при этом продолжает обращаться к TPNumber.h в прошлой папке. А тот, что в текущей папке, в упор отказывается видеть.

Буду делать наоборот. Новую папку отправлять в архив, а работать в старой.
Извините, что отняла столько времени из-за такой ерунды((
teapot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
почему интеренет на Xp не работает, а на семерке работает Lenura Windows 18 04.10.2010 12:04
TP7 чтение из файла, работает но не работает!? Qousio Помощь студентам 7 02.06.2009 09:37
Библиотека НЕ работает с 2008, но работает с 2000 SQL namenike Общие вопросы C/C++ 0 26.05.2009 11:04
Проблема с UserForm. То работает, то НЕ работает Maxx Microsoft Office Excel 6 19.11.2008 14:51