С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Алина_258
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 11
#1

Конструктор классов, Visual Studio 2008 - C++

14.06.2011, 15:20. Просмотров 1372. Ответов 8
Метки нет (Все метки)

Добрый день))

Помогите разобраться с ошибками.

В участке кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Перегрузка конструктора копирование  по умолчанию
Text (char ttext)
{
    //delete str[];
    //в прееменнуб длины записывает длину слова
    size = strlen(ttext.str);
    //заводим символьную переменную с вычисленны м размером
    str = new char[size+1];
    //заводим числовой массив частоты слов
    k= new int[size+1];
    //копируем в str строку
    strcpy(str,ttext.str);
    //возвращаемуказатель *this
    return *this;
}
Компилятор выдаёт ошибки:
Ошибка 5 error C2062: тип "char" не требуется k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 48 la3
Ошибка 6 error C2143: синтаксическая ошибка: отсутствие ";" перед "{" k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 49 la3
Ошибка 7 error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа) k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 49 la3


Сам программный код:

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
//подключаемые файлы
#include <ctype>
#include <fstream>
//
#include <windows>
#include <iomanip>
#include "stdafx.h"
#include <string.h>
#include <locale>
#include <stdio.h>
#include <iostream>
//подключение поля namespase
using namespace std;
 
//класс текст
class Text
{
    //скрытые элементы класса
private:
    //указатель на слово
    char* str;
    //разсер
    int size;
    //количество овторений
    int* k;
     //буфер
 
public:  
    //Функция возврата массива символов 
    const char* Show(void);
 
    //Функция сортировки слов (по возрастанию)
    void SortWord(void);
 
    //Перегрузка конструктора копирование  по умолчанию
    Text (char ttext);
    //Конструктор по умолчанию
    Text();    
    //Деструктор класса
    ~Text();
};
 
//Перегрузка конструктора копирование  по умолчанию
Text (char ttext)
{
    //delete str[];
    //в прееменнуб длины записывает длину слова
    size = strlen(ttext.str);
    //заводим символьную переменную с вычисленны м размером
    str = new char[size+1];
    //заводим числовой массив частоты слов
    k= new int[size+1];
    //копируем в str строку
    strcpy(str,ttext.str);
    //возвращаемуказатель *this
    return *this;
}
 
//Функция возврата массива символов 
const char* Text::Show(void)  // константный символьный указатель на функцию класса возвращает значение str
{
    int Word = 0; //Счетчик слов
    char** ArrWord = new char*[size+1]; //Массив слов
    char *buffer = new char[size+1]; //Буферная переменная
    char *ptr = buffer; //Указатель на буферную переменную
    memset(buffer,0,size+1); //Обнулим буфрную переменную
    char *pl;
    char c = ' ';
 
     for (int i=0; i <= strlen(str); i++) //Обойдем по-символьно всю строку
    
 
        *pl = *strrchr(str, c);
 
        int i = 0;
 
        if (!pl) //Если не пробел
        {
            char *ptr;
            *ptr++ = str[i]; //Пишим в буферную переменную и сдвигаем указатель
            i++;
 
        }
        else 
            if (strlen(buffer)>0) //Если же управляющий или разделитель и длина буферной переменной >0
        {
            ArrWord[Word] = new char[size+1]; //Выделим память под слово
            strcpy(ArrWord[Word++],buffer); //Скопируем буферную переменную в слово
            memset(buffer,0,size+1); //Обнулим память буферной переменной
            ptr = buffer; //Поставим указатель на начало буферной переменной
        }
            else {}
 
 
    char buf='0';
    const char *buff = &buf;
    strcpy(str,ArrWord[0]);
    strcpy(str, buff);
    strcpy(str, ArrWord[Word]);
 
//const int Word;
    //const int kо=k[0];
    //const int kw=k[Word];
 
    //struct stroka
    //{char str;
    //int ko;
    //int   kw;};
 
    return  str;
    k[0];
    k[Word];
}
 
//Функция сортировки слов (по возрастанию)
void Text::SortWord(void)
{        
 
    int Word = 0; //Счетчик слов
    char** ArrWord = new char*[size+1]; //Массив слов
    char *buffer = new char[size+1]; //Буферная переменная
    char *ptr = buffer; //Указатель на буферную переменную
    memset(buffer,0,size+1); //Обнулим буфрную переменную
    char *pl;
    char c = ' ';
 
    for (int i=0; i <= strlen(str); i++) //Обойдем по-символьно всю строку
    {
 
 
        *pl = *strrchr(str, c);
 
        if (!pl) //Если не пробел
        {
            char *ptr;
            *ptr++ = str[i]; //Пишим в буферную переменную и сдвигаем указатель
            k[i]=1;
        }
        else 
            if (strlen(buffer)>0) //Если же управляющий или разделитель и длина буферной переменной >0
        {
            ArrWord[Word] = new char[size+1]; //Выделим память под слово
            strcpy(ArrWord[Word++],buffer); //Скопируем буферную переменную в слово
            memset(buffer,0,size+1); //Обнулим память буферной переменной
            ptr = buffer; //Поставим указатель на начало буферной переменной
        }
            else {}
 
    }
    for (int i=0; i<Word-1; i++) /*в цикле обходим все лова*/
    {for (int j=1; j<Word; j++)
 
        {if (ArrWord[i]==ArrWord[j]) /*если слова под обоими объектами одинаковы */
    {k[i] = k[i] + 1;}/* количество повторений увеличиваем на 1*/
}}
 
    //const char *bufer= &buffer;
 
    //int k[size] = {1};
 
    //int str_len = strlen(buffer);
 
    //int i;
   // for(i = 0; i < str_len; i++)
   // {
   //     k[(unsigned char)str[i]]++;
   // }
 
 
    memset(str,0,size+1); //Обнулим строку
    //Сортируем слова по длине
 
    //char Arrword[100];
 
    for (int i = 0; i<Word-1; i++)//Обойдем весь массив слов
    {
        int mkol=k[i];//mkol присваивается значение k текущее
        char * Max =  ArrWord[i];// символьной переменной Max присваивается указатель на пермененную с индексом i массива Arrword
        int pos = i; // значению целочисленной переменной pos присваивается значение i
 
        for (int j=i; j<Word; j++) //Обойдем все слова с i 
        {
            if (mkol < k[pos])
            {
               Max =  ArrWord[j];
                mkol = k[j];
                pos = j;
            }
 
 
if (ArrWord[i]==Max)
{}
else
{strcpy(buffer, ArrWord[i]);
strcpy (ArrWord[i],ArrWord[j]);
strcpy (ArrWord[j], buffer);
}
 
                Max =  ArrWord[i];
                mkol = k[i];
                pos = i;
strcat(str,ArrWord[i]);
                }
        if ( (i+1) != Word) strcat(str," ");
    }
    for (int i = 0; i<Word; i++)
    {
        delete[] ArrWord[i];
    }
    delete [] buffer;
    delete [] ArrWord;
}
 
//Деструктор класса
Text::~Text()
{
    delete[] str;
}
 
 
// главный код программы
int _tmain(int argc, _TCHAR* argv[])
{
    //поключение русского языка
    setlocale(LC_ALL, "Russian");
    
    //Тестирование класса Text
    //инициализируем k
 
char ttext;
cout<<"введите текст"<< endl;
cin>> ttext;
//char * Value= &ttext;
    Text K(ttext);
    //выполняе выполнение функции для K объекта с текстом 
    K.SortWord();
    //печатаем результат
    std::cout<<K.Show()<<std::endl;
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2011, 15:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор классов, Visual Studio 2008 (C++):

MS Visual Studio 2008 всплывающие подсказки над переменными классов - C++
Добрый день. Как можно включить автоматическую появление подсказки над переменной в классе которые пишутся после переменной в комментариях,...

Написать программу. Задания нужно выполнять на языке Visual C++ в среде Microsoft Visual Studio 2008 - C++
Можете написать программу? Задание по номером 3.24 (2 рисунок).

несовместимость visual c++ 6.0 и visual studio 2008 - C++
почему правильно написанная программа в visual c++ 6.0 не работает в visual studio 2008 , а именно #include &lt;iostream&gt; using namespace...

несовместимость visual c++ 6.0 и visual studio 2008 - C++
почему правильно гаписанная программа в visual c++ 6.0 не работает в visual studio 2008 , а именно #include &lt;iostream&gt; ...

Конструктор в Visual Studio 2013 - C++
Есть ли конструктор в Visual Studio 2013 в языке C++, в C# нашел, а в С++ не найду проект с конструктором.

Visual studio 2008 C++ - C++
Вычислите сумму элементов верхнего правого треугольника матрицы и количество элементов в нем. матрица размером 5x5

8
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
14.06.2011, 15:34 #2
Алина_258, во-первых, это никакой не конструктор копирования. Сигнатура конструктора копирования должна быть такой:
C++
1
MyClass(const MyClass &);
Во-вторых, у вас параметр ttext имеет тип char, т.е. это просто один символ. Но вы пытаетесь обратиться к какому-то члену str символа ttexst.
В-третьих, конструктор не возвращает значений. вы же пытаетесь вернуть *this.
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
14.06.2011, 15:53 #3
пользуйся string, зачем комбинировать с и с++
0
Алина_258
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 11
14.06.2011, 15:54  [ТС] #4
Объявлю строку string вместо char.
Про конструктор ясно.
Спасибо))
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
14.06.2011, 15:54 #5
это вредно для здоровья
0
Алина_258
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 11
14.06.2011, 16:10  [ТС] #6
отчего? конструктор же может содержать в параметре любой тип.
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
14.06.2011, 16:34 #7
ну это так на будущее, когда начнёшь работать с исключениями поймёшь это. Деструкторы для автоматических объектов вызываются по мере раскрутки стека, а для char* ниченго не вызывается, вся ответсвенность за удаление лежит на пользователе в случае чего. Строки в стиле си практически не нужны в с++, тольтко для каких-нибудь низкоуровневых представлений

Добавлено через 8 минут
указатели прочих типов можно в auto_ptr загнать, чтобы гарантировать их уничтожении в не зависимости от того как завершилась функция
1
Алина_258
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 11
14.06.2011, 16:49  [ТС] #8
прописала массив *char text в параметре конструктора,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Text (char * ttext)
{
 
    //delete str[];
    char ch = '0';
    //в прееменнуб длины записывает длину слова
    size = strlen(* ttext);
    for (int i = 0 ; i < size ; i++)
    {
    //заводим числовой массив частоты слов
    char * probel = char *strrchr(ttext, str);
    char *strncpy (char *ttext, char *str, char *probel);
    //заводим символьную переменную с вычисленны м размером
    k= new int[size+1];}
    //копируем в str строку
   // strcpy(str,ttext.str);
 
}
Ошибки остались прежними
Ошибка 5 error C2062: тип "char" не требуется k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 48 la3
Ошибка 6 error C2143: синтаксическая ошибка: отсутствие ";" перед "{" k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 49 la3
Ошибка 7 error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа) k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 49 la3
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
14.06.2011, 17:01 #9
Цитата Сообщение от Алина_258 Посмотреть сообщение
size = strlen(* ttext);
size = strlen(ttext);
Цитата Сообщение от Алина_258 Посмотреть сообщение
char * probel = char *strrchr(ttext, str);
char * probel = strrchr(ttext, str);
Цитата Сообщение от Алина_258 Посмотреть сообщение
strncpy (ttext, str, probel);
probel тут как бы вобще не вписывается, если мне память не изменяет третий параметр там инт или size_t

Добавлено через 4 минуты
советую почитать сначала про указатели и asciiz строки, иначе последующее изучение языка будет крайне не продуктивным. А потом уже пытаться тыркаться с классами. Так с верхушки не получиться изучить язык. Пробелы рано или поздно дадут о себе знать, собственно они уже щас тянут тебя вниз
1
14.06.2011, 17:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2011, 17:01
Привет! Вот еще темы с ответами:

Visual Studio 2008 - C++
Здравствуйте.У меня студия 2010 (экспресс-версия) поставилась,но при запуске уже когда ввел уже код(я уже активировал когда-то,но тогда 7...

Калькулятор на MS Visual Studio 2008 C++ - C++
Если была такая тема, плиз киньте ссылочку на исходник. Очень нужен. Хотябы простой с обычными действиями. Добавлено через 23 минуты ...

Вопрос по Visual Studio 2008 - C++
Запустил программку в 11 утра сегодня. До сих пор выполняется. Надо с работы уходить домой. Думаю прийти в понедельник и посмотреть за...

Visual Studio 2008 Prof - C++
При попытке запуска программы в компиляторе выводит следующую ошибку. 1&gt;LINK : fatal error LNK1104: не удается открыть файл...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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