Автор Тема: Помогите с С++  (Прочитано 1205 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Richi

  • Новичок
  • *
  • Сообщений: 18
  • Карма: -5
    • Просмотр профиля
Помогите с С++
« : 16.12.07, 17:12:44 »
   Помогите!           -wall-
Что то не компилируется программка  на С++.
Вот задание и код:

//  Разработать класс для представления объекта строка. Определить конструктор
// с одним параметром целого типа ? длина строки, который можно использовать
// как конструктор умолчания. Определить конструктор, который копирует в
// новую строку n первых символов другой строки и который можно использовать
// как конструктор копирования. Определить деструктор. Определить
// преобразования из вещественного числа в строку, представляющую это число,
// и из строки в вещественное число.
//-----------------------------------------------------------------------------

#include <stdio.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <vcl.h>
#pragma hdrstop
#pragma argsused
using namespace std;

class Str
  {
   private:
    enum {MAX = 20};

    int l;
    char Str[MAX];

   public:
    // Конструкторы:
    Str(int ln = 5, char ch=5);        // Умолчание
    Str(const Str& , int n = 3);       // Копирование
    explicit Str(double);                 // Преобразование
    // Деструктор:
    ~Str();

   // Методы:
   void show() const;                    // Вывод на экран
   double Str_to_double();             // Преобразование типа double
};

   // Деструктор:
   Str::~Str() { cout << "Destructed\n"; }

   // Конструктор умолчания:
   Str::Str(int ln, char ch)
   {
   int i;

   l = ln;
   for (i=0; i < ln; i++) Str = ch;
   }

   // Конструктор копирования:
   Str::Str(const Str& m , int n)
   {
   int i;

   l = m.l;
   for (i=0; i < n; i++) Str = m.Str;
   }

   // Конструктор преобразования:
   Str::Str(double x)
   {
   int i;

   l = 4;
   for (i=0; i < l; i++) Str = x;
   }

   // Вывод на экран:
   void Str::show() const
   {
   int i;

   for(i=0; i < l; i++)
   {
    printf("%i ", Str);
    printf("\n");
   }
   }

   // Преобразование типа double:
   double Str::Str_to_double()
   {
   int i, sum = 0;
   double mid;

   for (i=0; i < l; i++) sum += int(Str);
   mid = (sum / l);
   return mid;
   }

void main()
{
  Str stroka1(5, 10);               // Создание строки длины 5 с элементами 10

  Str stroka2(stroka1, 3);         // Увеличение строки на 3

  Str transform;                      // Строка преобразования
  transform = Str(double(7));

  double y;                             // Преобразование типа double
  y = stroka1.Str_to_double();

  stroka1.show();
  printf("\n");

  stroka2.show();
  printf("\n");

  transform.show();
  printf("\n");

  printf("%f\n\n", y);
  getch();
}


Оффлайн rockerzz

  • Старожил
  • ****
  • Сообщений: 762
  • Карма: 118
  • Пол: Мужской
  • Freefly
    • Просмотр профиля
Re: Помогите с С++
« Ответ #1 : 16.12.07, 17:36:25 »
ЖЖошь..


class Str
 {
   private:
    enum {MAX = 20};

    int l;
    char Str[MAX];

  ....

}


Тоже зверская конструкция -   for (i=0; i < ln; i++) Str = ch;

Ну и там еще по мелочи.. =)
« Последнее редактирование: 16.12.07, 18:05:25 от rockerzz »
Fly like a brick

Оффлайн Richi

  • Новичок
  • *
  • Сообщений: 18
  • Карма: -5
    • Просмотр профиля
Re: Помогите с С++
« Ответ #2 : 16.12.07, 18:09:52 »
Извините, можно поподробнее. В том тексте небольшие ошибки. Вот файлик с кодом.

Оффлайн rockerzz

  • Старожил
  • ****
  • Сообщений: 762
  • Карма: 118
  • Пол: Мужской
  • Freefly
    • Просмотр профиля
Re: Помогите с С++
« Ответ #3 : 16.12.07, 18:23:52 »
Да у тебя там вагон ошибок.

1. Не #include <iostream.h>, а #include <iostream>;
2. Что за заголовочные файлы и зачем? #include <conio.h>, #include <vcl.h>;
3. У тебя в одной области видимости два объявления с одним и тем же именем - ты либо класс называй Str, либо массив Str[MAX];
4. Функция main() должна возвращать значение. void main() -  не верно. int main( int argc, char **argv ) - вот одна из правильных конструкций;
5. Str stroka1(5, 10); - неоднозначный вызов, не понятно какой конструктор использовать. Как вариант написать так: Str stroka1(5, (char)10);
6. Вызов getch() - у меня выдает ошибку, потому что явного объявления нет. Может оно где-то тут неявно conio.h, vcl.h - хз. Я не понял что это за заголовочный файлы и тупо их закоментировал.

Это явные ошибки на которые ругался мой компилятор.
Fly like a brick

Оффлайн Richi

  • Новичок
  • *
  • Сообщений: 18
  • Карма: -5
    • Просмотр профиля
Re: Помогите с С++
« Ответ #4 : 16.12.07, 20:22:03 »
 Большое спасибо за помощь. Исправил, все работает!    :-)