Derangedbuffalo Ответов: 3

Код незакончен, но из того, что у меня есть до сих пор, я постоянно получаю ошибку, утверждающую, что "ни один оператор '=' не соответствует этим операндам"


#include <iostream>
#include <string>
using namespace std;

class Movie
{
private:
	string name;
	string director;
public:
	Movie()
	{
		name = "Movie";
		director = "Director";
	}
	Movie(string n, string d)
	{
		name = n;
		director = d;
	}
	void setName(string n)
	{
		name = n;
	}
	void setDirector(string d)
	{
		director = d;
	}
	string getName()
	{
		return name;
	}
	string getDirector()
	{
		return director;
	}
	void DisplayData(Movie data[], int size)
	{
		cout << "Movie list: ";
		for (int c = 0; c < size; c++)
		{
			cout << name[c] << " ";
		}

		cout << endl;
	}
	void BubbleSort(Movie data[], int size)
	{
		string temp;
		bool swap;
		do
		{
			swap = false;
			for (int c = 0; c < size - 1; c++)
			{
				if (data[c].getName() > data[c+1].getName())
				{
					temp = data[c];
				}
			}
		} while (swap = true);
	}

};


Что я уже пробовал:

Я пробовал разные вещи, но безрезультатно.

PIEBALDconsult

Посмотрите на номер линии.

3 Ответов

Рейтинг:
5

CPallini

Эй, чувак, это C++, и у тебя гораздо лучшие альтернативы массивам и пузырьковой сортировке.

#include <vector>
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

class Movie
{
private:
  string name;
  string director;
public:

  Movie(string n="Movie", string d="Director"):name(n), director(d){}

  void setName(string n)
  {
    name = n;
  }
  void setDirector(string d)
  {
    director = d;
  }
  const   string getName() const
  {
    return name;
  }
  const string getDirector() const
  {
    return director;
  }
};

ostream & operator << (ostream & os, const Movie & movie)
{
  os << movie.getName();
  return os;
}

int main()
{
  vector< Movie > mv{ Movie("Foo", "boo"), Movie("Goo"), Movie("AAA", "BBB")};

  cout << "list of movies: ";
  for ( const auto & m : mv)
    cout << m << " ";
  cout << endl;

  sort( mv.begin(), mv.end(), [](const Movie & m1, const Movie & m2) {return (m1.getName() < m2.getName());});

  cout << "sorted list of movies: ";
  for ( const auto & m : mv)
    cout << m << " ";
  cout << endl;
}


Maciej Los

5ed!

CPallini

Большое тебе спасибо, Мацей!

Derangedbuffalo

Спасибо, чувак! Я ценю это. Я знаю, что есть масса других, лучших способов, но это задание требует массивов и bubblesort. Это не моя чашка чая. Лол, Спасибо за пример.

CPallini

Ну, вы же не заявили об этом в ОП.
Даже с массивами и пузырьковой сортировкой в качестве требований вы можете улучшить свой код. Например, BubbleSort и DisplayData на самом деле должны быть статическими (а не экземплярными) методами.

Рейтинг:
23

David O'Neil

{
    temp = data[c];
}


Вы пытаетесь присвоить 'temp' (строку) экземпляру класса Movie. Вам нужно назначить его копии строки "имя" в классе. Вы можете сделать это, создав оператор '=' для класса, или через 'getName', или другим способом, если хотите.


CPallini

5.

Maciej Los

5ed!

Derangedbuffalo

Танки! Я действительно ценю это. Я закончил тем, что использовал getName, и это сработало!

Рейтинг:
16

Dave Kreskowiak

Ваш while утверждение неверно:

do
		{
			swap = false;
			for (int c = 0; c < size - 1; c++)
			{
				if (data[c].getName() > data[c+1].getName())
				{
					temp = data[c];
				}
			}
		} while (swap = true);

Вы назначаете true к swap, не делая сравнения. "Равно" - это ==, а не =.


CPallini

5.

Maciej Los

5ed!