Ошибка (активно) E0330 "String_indent::String_indent(const char *string)" (объявлено в строке 102)
Не понимаю почему экземпляр класса не хочет принимать мою строку, хотя сделано вроде как все верно:
String_indent::String_indent(const char* string) {
int len = strlen(string);
this->string = new char(len + 1);
for (int i = 0; i < len; i++) {
this->string[i] = string[i];
}
this->string[len + 1] = '\0';
}
String_indent::~String_indent() {
delete[] this->string;
}
Класс String_indent наследован от класса String, в котором точно такая же реализация и она работает
class String_indent : public String{
String_indent();
String_indent(const char* string);
void Upper_case();
void Lower_case();
~String_indent();
private:
char* string;
int len;
}
int main() {
String string("String"); // Работает
String_indent string1("String"); // Не работает
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Короткое замечание — непонятно, зачем вам вообще функция get_len?
Ну, а по делу... Вот ваш код, обратите внимание на строки, помеченные //// — это внесенные исправления (на ваши функции-члены я не смотрел, только на само наследование и конструкторы-деструкторы). Постарайтесь разобраться, почему такие изменения. Главное — если вы наследуете другой класс, то не надо его дублировать!
class String {
public:
String();
String(const char* string);
void printString();
void get_len(const char* string);
~String();
protected: ////
char* string;
int len;
};
class String_indent : public String { ////
public: ////
String_indent();
String_indent(const char* string);
void Upper_case();
void Lower_case();
~String_indent();
//private: ////
// char* string; ////
// int len; ////
};
int main()
{
String string("String");
String_indent string1("String");
return 0;
}
/*Конструктор без параметра класса String для задания начальных данных переменным string*/
String::String()
{
string = nullptr;
}
/*Конструктор с параметром который содержит указатель на массив чаров string и определяет основную реализацию строки*/
String::String(const char* string)
{
len = strlen(string); ////
this->string = new char[len + 1]; ////
for (int i = 0; i < len; i++) {
this->string[i] = string[i];
}
this->string[len] = '\0'; ////
}
void String::printString()
{
cout << string;
}
void String::get_len(const char* s)
{
int l = strlen(s);
cout << l;
}
/*Деструктор класса очищает память*/
String::~String()
{
delete[] this->string;
}
void String_indent::Upper_case()
{
for (int i = 0; i < len; i++) {
if ((this->string[i] >= 141) && (this->string[i] <= 172)) {
this->string[i] = string[i] - 40;
}
else if ((this->string[i] >= 101) && (this->string[i] <= 132)) {
this->string[i] = string[i];
}
else cout << "NULL";
cout << string[i];
}
}
void String_indent::Lower_case()
{
}
String_indent::String_indent() {
string = nullptr;
}
String_indent::String_indent(const char* string) ////
:String(string) ////
{ ////
// int len = strlen(string); ////
// this->string = new char(len + 1); ////
// for (int i = 0; i < len; i++) { ////
// this->string[i] = string[i]; ////
// } ////
// this->string[len + 1] = '\0'; ////
} ////
String_indent::~String_indent()
{
// delete[] this->string; ////
}