// Ошибка, возникающая при возвращении объекта.
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class samp {
char *s;
public:
samp() { s = '\0'; }
~samp() { if(s) free(s); cout << "s освобождается" << endl; }
void show() { cout << s << endl; }
void set(char *str);
};
// Строка загружается.
void samp::set(char *str)
{
s = (char *) malloc(strlen(str)+1);
if (!s) {
cout << "Ошибка выделения места в памяти" << endl;
exit(1);
}
strcpy(s, str);
}
// возврат объекта типа samp.
samp input()
{
char s[80];
samp str;
cout << "Введите строку: ";
cin >> s;
str.set(s);
return str;
}
int main()
{
samp ob;
// попытка присвоить возвращаемый объект ob.
ob = input(); // Это приводит к ошибке!
ob.show();
return 0;
}
Ошибка:
main.cpp: In constructor ‘samp::samp()’:
main.cpp:10:30: error: invalid conversion from ‘char’ to ‘char*’ [-fpermissive]
10 | samp() { s = '\0'; }
| ^~~~
| |
| char