![]() |
|
Модераторы: Poseidon |
![]()
|
|
| cavechild |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 13.12.2008 Репутация: нет Всего: нет |
помогите найти причину ошибки
error C2512: 'my_string' : no appropriate default constructor available error C2248: 'len' : cannot access private member declared in class 'my_string' see declaration of 'len') |
|||
|
||||
| Rodman |
|
|||
|
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: 26 Всего: 122 |
а де искать?
|
|||
|
||||
| Hades |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 226 Регистрация: 8.8.2008 Репутация: 4 Всего: 37 |
у вас нету конструктора по умолчанию
в не класса вы не имеете доступ к приватному полю класса |
||||
|
|||||
| cavechild |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 13.12.2008 Репутация: нет Всего: нет |
вот код в низу условие
#include <iostream> #include <string> #include <cstring> #include <conio.h> using namespace std; class my_string{//класс - строка int len; char *str; public: my_string(char*);// my_string(char); my_string(const my_string&); my_string(string); ~my_string(); void print(int); unsigned length(); my_string operator=(const my_string&); my_string operator+=(const my_string&); friend my_string operator+(const my_string&, const my_string&); char &operator[](int); friend bool operator==(const my_string&, const my_string&); friend bool operator!=(const my_string&, const my_string&); friend bool operator<=(const my_string&, const my_string&); friend bool operator>=(const my_string&, const my_string&); friend bool operator>(const my_string&, const my_string&); friend bool operator<(const my_string&, const my_string&); }; my_string::my_string(char *s = ""){ len = strlen(s); str = new char[len + 1]; strcpy(str,s); } my_string::my_string(char c){ if(c != '\0') len = 1; else len = 0; str = new char[len + 1]; if(c != '\0'){ str[0] = c; str[1] = '\0'; } else str[0] = '\0'; } my_string::my_string(const my_string &s){ len = s.len; str = new char[len + 1]; strcpy(str,s.str); } my_string::my_string(string s){ len = s.length(); str = new char[len + 1]; for(int i=0;i<len;i++) str[i] = s[i]; str[len] = '\0'; } my_string::~my_string(){ delete [] str; } void my_string::print(int n = 0){ if(n<=0 || n>=len) printf("%s",str); else{ for(int i=0;i<n;i++) printf("%c",str[i]); } } unsigned my_string::length(){ return len; } my_string my_string::operator=(const my_string &ob){ if(this == &ob) return *this; if(len != ob.len){ len = ob.len; delete [] str; str = new char[len + 1]; } strcpy(str,ob.str); return *this; } my_string operator+(const my_string &str1, const my_string &str2){ my_string res; res.len = str1.len + str2.len; res.str = new char[res.len + 1]; int i; for(i=0;i<str1.len;i++) res.str[i] = str1.str[i]; for(i=str1.len;i<res.len;i++) res.str[i] = str2.str[i-str1.len]; res.str[res.len] = '\0'; return res; } my_string my_string::operator+=(const my_string &ob){ *this = *this + ob; return *this; } bool operator==(const my_string &ob1, const my_string &ob2){ return !strcmp(ob1.str,ob2.str); } bool operator!=(const my_string &ob1, const my_string &ob2){ return strcmp(ob1.str,ob2.str); } bool operator<(const my_string &ob1, const my_string &ob2){ bool res = 0; if(strcmp(ob1.str,ob2.str)<0) res = 1; return res; } bool operator>(const my_string &ob1, const my_string &ob2){ bool res = 0; if(strcmp(ob1.str,ob2.str)>0) res = 1; return res; } bool operator>=(const my_string &ob1, const my_string &ob2){ return !(ob1<ob2); } bool operator<=(const my_string &ob1, const my_string &ob2){ return !(ob1>ob2); } char &my_string::operator[](int i){ return str[i]; } int main(){ my_string s("!"); s.print(); getch(); } Общая постановка. Пользовательский класс String должен содержать необходимые элементы-данные, которые создаются в динамической области памяти. Конструктор для создания строк: String (…); Деструктор: ~String(); Метод ввода исходной строки: Set(); Метод печати: void print(…); Код методов – вне пространства определения класса. Программа иллюстрирует прямой и косвенный способы обращения к методам. Ввести с клавиатуры строку символов S1. Признак окончания ввода строки - нажатие клавиши "Ввод". Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2 . Исходную и преобразованную строки вывести в файл. Длина L кратна 3, то удаляется каждый 3-й символ есть еще второй вариант но внем тоже ошибки |
|||
|
||||
| taiven |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 302 Регистрация: 30.6.2008 Репутация: 4 Всего: 9 |
да вроде нет здесь ошибок... каким компилятором пользуешься?
|
|||
|
||||
| Avaj |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: 1 Всего: 3 |
cavechild, Я писал это в CodeBlocks - GCC
Это сообщение отредактировал(а) Avaj - 23.12.2008, 06:59 |
|||
|
||||
| cavechild |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 13.12.2008 Репутация: нет Всего: нет |
microsoft visual c++ 6.0
|
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |