@sshirtd

Ошибка в коде C++.?

// Ошибка, возникающая при возвращении объекта.
	#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
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos
Ну в целом ошибка сама за себя говорит. Нельзя в указатель записать символ.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Кроме указанной компилятором ошибки у вас будет утечка памяти, если 2 раза вызовите set для одного и того же объекта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы