Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
#1

Правильное чтение символов в динам. массив - C++

03.04.2013, 08:39. Просмотров 342. Ответов 3
Метки нет (Все метки)

Ошибка скорей всего в синтаксисе. Если надо, могу и все исходники выложить
хэдэр
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Cow {
public:
    const static int lenght = 20;
    Cow ();
    Cow (const char * nm, const char * ho, double wt);
    Cow (const Cow & c);
    ~Cow ();
    Cow operator= (const Cow & c);
    void ShowCow ();
private:
    char name [lenght];
    char * hobby ;
    double weight;
};
конструкторы по умолчанию и не по умолчанию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
Cow::Cow () {
    std::strcpy (name, "Default cow");
    char * hobby = new char [Cow::lenght];
    std::strcpy (hobby, "Do nothing");
    weight = 0;
};
Cow::Cow (const char * nm, const char * ho, double wt) {
    std::strcpy (name, nm );
    char * hobby = new char [Cow::lenght];
    std::strcpy (hobby, ho );
    weight = wt;
};
в мэине считывание происходит так
cout << "Hobby: ";
char * ho = new char [Cow::lenght];
cin.get (ho, Cow::lenght);
Отладчик VS 2012 говорит об ошибке
Миниатюры
Правильное чтение символов в динам. массив  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 08:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Правильное чтение символов в динам. массив (C++):

Правильное обьявление функции, что возвращает двумерный массив символов - C++
Есть функция goUP. Как ее объявить так, чтобы она принимала двумерный массив символов и возвращала двумерный массив символов (если можно,...

Чтение файла в массив символов используя fstream - C++
Добрый день. Нужно считать файл в массив символов(vector). Использую fstream.

Одномерный динам массив - C++
вычислить количество элементов больших C вычислить произведение элементов расположенных после максимального по модулю элемента ...

Динам. массив в классе - C++
Здравствуйте, За пример брал пободный код (он работает и делает дин.массив из нолей): #include &lt;iostream&gt; using namespace std; ...

Добавление элементов в динам. массив с последующей сортировкой - C++
Всем доброго времени суток. Можно ли как-нибудь добавлять элементы в динам. массив? Т.е. у меня массив string (фамилии) в алфавитном...

Правильное чтение из файла! - C++
Помогите пожалуйста, уже опробовал все((( Суть задачи такая, есть файл data.txt в нем есть числа выглядит он так: Ниже представлен...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.04.2013, 11:23 #2
tramp_1-3, закиньте все исходники. Не очень понятно в какой момент ошибка возникает.
P.S. оператор= должен возвращать ссылку (Cow&)
IrineK
03.04.2013, 12:35
  #3

Не по теме:

Отладчик английской орфографии тоже говорит об ошибке: исправьте lenght на length
На будущее: исходниками с такими ошибками никто не сможет воспользоваться и они превращаются в мусор даже при хорошем уровне разработки.

tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
04.04.2013, 11:23  [ТС] #4
Цитата Сообщение от Tulosba Посмотреть сообщение
tramp_1-3, закиньте все исходники. Не очень понятно в какой момент ошибка возникает.
P.S. оператор= должен возвращать ссылку (Cow&)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "cow.h"
#include <iostream>
void SomeFunc (Cow obj);
int main () {
    using std::cin;
    using std::cout;
    cout << "Cow's name: ";
    char * name = new char [Cow::length];
    cin.get (name, Cow::length);
    cin.ignore (1);
    cout << "Hobby: ";
    char * ho = new char [Cow::length];
    cin.get (ho, Cow::length);
    cout << "Weight: ";
    double weight;
    cin >> weight;
    Cow * first = new Cow (name, ho, weight);
    first->ShowCow ();
    cout << "Create another object by default\n";
    Cow second;
    second.ShowCow ();
    cout << "Assignment fist to second\n";
    second = *first;
    second.ShowCow ();
    cout << "Passing object by value\n";
    SomeFunc (second);
    system ("pause");
    delete [] ho;
    delete [] name;
    return 0;
};
void SomeFunc (Cow obj) {
    std::cout << "That's in function: \n";
    obj.ShowCow ();
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "cow.h"
#include <iostream>
#include <cstring>
Cow::Cow () {
    std::strcpy (name, "Default cow");
    char * hobby = new char [Cow::length];
    std::strcpy (hobby, "Do nothing");
    weight = 0;
};
Cow::Cow (const char * nm, const char * ho, double wt) {
    std::strcpy (name, nm );
    char * hobby = new char [Cow::length];
    std::strcpy (hobby, ho );
    weight = wt;
};
Cow & Cow::operator= (const Cow & c) {
    if (this == &c) 
        return *this;
    std::strcpy (name, c.name);
    delete [] hobby;
    char * hobby = new char [Cow::length];
    std::strcpy (hobby, c.hobby);
    weight = c.weight;
    return *this;
};
Cow::Cow (const Cow & c) {
    std::strcpy (name, c.name);
    delete [] hobby;
    char * hobby = new char [Cow::length];
    std::strcpy (hobby, c.hobby);
    weight = c.weight;
};
Cow::~Cow () {
    name [0] = '\0';
    delete [] hobby;
    weight = 0;
};
void Cow::ShowCow () {
    std::cout << name << " likes " << *hobby << " and weights " << weight << '\n';
};
Добавлено через 1 минуту
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
tramp_1-3, закиньте все исходники. Не очень понятно в какой момент ошибка возникает.
P.S. оператор= должен возвращать ссылку (Cow&)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Cow {
public:
    const static int length = 20;
    Cow ();
    Cow (const char * nm, const char * ho, double wt);
    Cow (const Cow & c);
    ~Cow ();
    Cow & operator= (const Cow & c);
    void ShowCow ();
private:
    char name [length];
    char * hobby ;
    double weight;
};
Добавлено через 5 минут
Цитата Сообщение от IrineK Посмотреть сообщение
На будущее: исходниками с такими ошибками никто не сможет воспользоваться и они превращаются в мусор даже при хорошем уровне разработки.
жаль, я думал что невинная буква режет глаз меньше, чем переменные под понятными и красноречивыми названиями Peremrnnaya100500 или Summa9000.

Добавлено через 18 минут
Ошибку нашел - в методах память под строки надо выделять так
C++
1
hobby = new char [Cow::length];
правда, другие вылезли

Добавлено через 22 часа 1 минуту
Если кому-то интересно, то вот полностью рабочие исходники:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
class Cow {
private:
    int length;
    char  name [20] ;
    char * hobby ;
    double weight;
public:
    Cow ();
    Cow (const char *, const char *, double);
    Cow (const Cow &);
    ~Cow ();
    Cow & operator= (const Cow &);
    friend std::ostream & operator << (std::ostream &, const Cow &);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "cow.h"
#include <cstring>
Cow::Cow () {
    strcpy (name, "Default cow");
    length = strlen ("Default action");
    hobby = new char [length + 1];
    strcpy (hobby, "Default action");   
    weight = 0;
};
Cow::Cow (const char  nm [], const char * ho, double wt) {
    std::strcpy (name, nm );
    length = strlen (ho);
    hobby = new char [length + 1];
    strcpy (hobby, ho );
    weight = wt;
};
Cow & Cow::operator= (const Cow & c) {
    if (this == &c) 
        return *this;
    strcpy (name, c.name);
    delete [] hobby;
    length = strlen (c.hobby);
    hobby = new char [length + 1];
    strcpy (hobby, c.hobby);
    weight = c.weight;
    return *this;
};
Cow::Cow (const Cow & c) {
    strcpy (name, c.name);
    length = strlen (c.hobby);
    hobby = new char [length + 1];
    strcpy (hobby, c.hobby);
    weight = c.weight;
};
Cow::~Cow () {
    name [0] = '\0';
    delete [] hobby;
    weight = 0;
};
std::ostream & operator << (std::ostream & os, const Cow & c) {
    std::cout << c.name << " likes ";
    for (int i = 0; i < c.length; i++)
        std::cout.put (c.hobby [i]);
    std::cout << " and weights " << c.weight << '\n';
    return os;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "cow.h"
#include <iostream>
void SomeFunc (Cow obj);
int main () {
    using std::cin;
    using std::cout;
    cout << "Cow's name: ";
    char * name = new char [20];
    cin.get (name, 20);
    cin.ignore (1);
    cout << "Hobby: ";
    char * ho = new char [20];
    cin.get (ho, 20);
    cout << "Weight: ";
    double weight;
    cin >> weight;
    Cow * first = new Cow (name, ho, weight);
    cout << *first;
    cout << "Create another object by default\n";
    Cow second;
    cout << second;
    cout << "Assignment fist to second\n";
    second = *first;
    cout << second;
    cout << "Passing object by value\n";
    SomeFunc (second);
    system ("pause");
    delete [] ho;
    delete [] name;
    delete first;
    return 0;
};
void SomeFunc (Cow obj) {
    std::cout << "That's in function: \n" << obj << '\n';
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2013, 11:23
Привет! Вот еще темы с ответами:

Ошибка при высвобождении ранее выделенной памяти под динам. массив - C++
Собственно, в чем суть: //инициализирую bool* delimeters = new bool; ... //Удаляю delete delimeters; Точки останова...

Матрица и одномерный массив (Составить одномерный массив, содержащий количество буквенных символов в каждом из ее столбцов, подсчет символов) - C++
Помогите решить задачку: Дана матрица 5х7, элементами которой являются значения символьного типа. Составить одномерный массив, содержащий...

Чтение символов с консоли - C++
Как записать в строку уже выведенные на консоль символы, в том числе пробелы? scanf ждет, что я их введу с клавиатуры Среда - Борланд...

Чтение символов из файла - C++
Дан текст; определить, содержит ли он символы, отличные от букв и пробела


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.04.2013, 11:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru