Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема с конструктором


Автор: VAZik 24.8.2005, 12:49
Есть следующиe классы
Код

class verylong
{
protected:
 char number [1024];
 int inc;
public:
 verylong ();
 friend istream& operator >> (istream& in, verylong& num);
 void get_string(char* str);
 verylong& operator* (int& a);
 verylong& operator= (int& a);
 char* display();
};

verylong::verylong()
{
 inc = 0;
 for (int i = 0; i < 1024; i++)
  number[i] = 0;
}

class long_binary : public verylong
{
 public:
  int convert_to_dec();
  char* convert_to_hex();
};

При выполнении запускается конструктор verylong, и не выполнив ни строчки из своего тела, передает управление функции power10().
Код

int power10 (int& exp)
{
 int result = 1;
 for (int i = 0; i < exp; i++)
 {
  result *= 10;
 }
 return result;
}

В которой exp = 200, и в результате вылетает ошибка.
Просто мистика какая-то...
В чем проблема?? Помогите кто чем может...

Автор: Artiom 24.8.2005, 13:28
Цитата(VAZik @ 24.8.2005, 11:49)
При выполнении запускается конструктор verylong, и не выполнив ни строчки из своего тела, передает управление функции power10().

Покажи код что и как запускаешь. У long_binary есть свой конструктор?

Автор: Vaulter 24.8.2005, 15:02
Цитата
При выполнении запускается конструктор verylong

покажи main

Автор: VAZik 25.8.2005, 07:35
Был следующий код...
Код

int main()
{
 char ch;
 int switcher;
// unsigned int number;
 do
 {
 long_binary bin_number;
 verylong number;
  cout << setfill('.') << setiosflags(ios::left) << "Transfer direction:\n" << setw(26)
  << "Binary to Decimal"  << "1\n" << setw(26) << "Decimal to Binary" << "2\n" <<
  setw(26) << "Binary to Hexadecimal" << "3\n" << setw(26) << "Decimal to Hexadecimal" <<
  "4\n" << setw(26) << "Hexadecimal to Decimal" << "5\n" << setw(26) << "Octal to Decimal"
  << "6\n" << "Input: ";
  cin >> switcher;
  cout << "Input number to transfer: ";
  cin >> number;
  switch(switcher)
  {
   case 1:
    number = bin_number.convert_to_dec();
    break;
   case 2:

    break;
   case 3:
  //  number = bin_to_hex(number);
    break;
   case 4:
  //  number = dec_to_hex(number);
    break;
   case 5:
  //  number = hex_to_dec(number);
    break;
   case 6:
  //  number = oct_to_dec(number);
    break;
   default:
    cout << "Incorrect transfer direction!\n";
  }
//  cout << number.display();
  cout << "Continue transfer(y/n): ";
  ch = getche();
  cout << endl << endl;
 }
 while(ch == 'y');

 getch();
 return 0;
}

char dec_to_bin(int& decimal_number)
{
 char result[1024];
 int i = 0;
 while(decimal_number>=2)
 {
  result[i] = decimal_number%2 + '0';
  decimal_number = static_cast<int>(decimal_number / 2);
  ++i;
 }
 result[i] = decimal_number;
 return 0;
}

хотя после того, как я удалил dec_to_bin, а потом его снова вставил... ошибка мистическим образом испарилась... я вообще ничего не понимаю...

Автор: Artiom 25.8.2005, 09:04
Так dec-to_bin нигде же не вызывается. И функции power10 нигде нет. И что тут глючит?

Автор: VAZik 25.8.2005, 10:27
power10 описана выше...
в том то и дело, что dec_to_bin не вызывается... а ошибка пропала... в общем мистика какая-то... и ошибка была какая-то мистическая...

Автор: Guest 26.8.2005, 12:14
[quote] При выполнении запускается конструктор verylong, и не выполнив ни строчки из своего тела, передает управление функции power10().
Выделить всёкод C++
1:
2:
3:
4:
5:
6:
7:
8:
9:

int power10 (int& exp)
{
int result = 1;
for (int i = 0; i < exp; i++)
{
result *= 10;
}
return result;
}

В которой exp = 200, и в результате вылетает ошибка.

10^199 не помещается в int

Автор: _hunter 26.8.2005, 12:53
само-собой... или long double юзай ( для приблищительных расчетов ) или ищи в факе тему о работе с большими числами

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