@m1kz

Почему функция не возвращает указатель на объект класса?

#include <iostream>
#include <windows.h>
using namespace std;

class A {
	friend A* tree(const string& s, A* a);
private:
	int count;
	string s;
	A* right=0, * left=0;

public:
	A(const string &s="empty") :s(s){}

	string get_s() {
		return s;
	}
	int get_c() {
		return count;
	}

};

//сравнение 2 строк
int compare(string s1, string s2) {
	char* text1 = new char[s1.length()];
	char* text2 = new char[s2.length()];
	for (size_t i = 0; i < s1.length(); i++)	{
		text1[i] = s1[i];
	}
	for (size_t i = 0; i < s2.length(); i++) {
		text2[i] = s2[i];
	}
	int x = strcmp(text1, text2);
	printf("%s\n\t%d\n", text1, x);
	free(text1);
	free(text2);
	return x;
}

A* tree(const string &s, A* a) {
	cout << (!a);
	if (!a)	{
		a->s = s;
		cout << 5;
		return a; //ошибка, не возвращает указатель на обьект класса
	}
	else {
		cout << a->get_s();
		int x = compare(s, a->get_s());
		if (!x) {
			a->count++;
			return a;
		}
		else if (x > 0) {

		}
	}
}


int main() {
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	A *node=0;
	int n;
	string s;
	cout << "Введите кол-во веток бинарного дерева:\n";
	//cin >> n;
	node = tree("hi", node); //не выполняется из-за ошибки в функции A* tree(const string &s, A* a)
	cout << node->get_c()<<555;
	node = tree("hi", node);
	cout << node->get_s()<<endl;
	cout << node->get_c();
	cout << 5;
	

}
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
if (!a)	{
    a->s = s;
    cout << 5;
    return a; //ошибка, не возвращает указатель на обьект класса
}


У вас тут a==NULL - пустой указатель. Вы пытаетесь его члену что-то присвоить (то. что программа не упала - вам дико повезло). потом вы возвращаете этот же пустой указатель.

Вам надо создавать новый объект через new в этом случае.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы