Электростальский форум
Hi-Tech => Компьютеры, периферия, мультимедиа и ПО => Тема начата: Richi от 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();
}
-
ЖЖошь..
class Str
{
private:
enum {MAX = 20};
int l;
char Str[MAX];
....
}
Тоже зверская конструкция - for (i=0; i < ln; i++) Str = ch;
Ну и там еще по мелочи.. =)
-
Извините, можно поподробнее. В том тексте небольшие ошибки. Вот файлик с кодом.
-
Да у тебя там вагон ошибок.
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 - хз. Я не понял что это за заголовочный файлы и тупо их закоментировал.
Это явные ошибки на которые ругался мой компилятор.
-
Большое спасибо за помощь. Исправил, все работает! :-)