Error C2678, coś jest nie tak z operatorem ==

0

Witam. Otóż kompilator sygnalizuje mi taki błąd error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::basic_string<_Elem,_Traits,_Ax>' (or there is no acceptable conversion) przy próbie kompilacji tego kodu:

#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
//=============================================================================================================//
int funkcja(string nazwa)
{
	string::size_type poz;
	string zamienniki = "ABCDEFGJKLMNPQR";

	poz = nazwa.find_last_of(zamienniki);

	for(int i = 0; i < zamienniki.length(); i++)
	{
		if( nazwa.substr(poz, 1) == zamienniki[i] )
		{
			return i;
			break;
		}
	}
}
//=============================================================================================================//
int main()
{
	string modul;

	cout << "Wprowadz nazwe modulu: ";
	getline(cin, modul);

	cout << "Ten modul ma numer: " << funkcja(modul);

	getch();
}

Chodzi w nim o to, żeby napisać funkcję, która pełną nazwę moduły przesłaną do niej jako argument (np. "Cluster_M") rozpozna w taki sposób, że jako rezultat (typu int) zwróci numer modułu. Ów numer - to jakby numer litery, według takiego porządku "ABCDEFGJKLMNPQR". Na przykład nazwa "Cluster_M" - określa moduł numer 10.

Nie za bardzo rozumiem ten błąd. Przecież po jednej ze stron operatora == musi stać string, czyli u mnie ostatnia litera wycięta przy pomocy substr, no a z drugiej strony stoi sobie jeden element stringu, więc chyba też jest ok. A jednak nie bo nie działa :/ Pomożecie?

0

Jeden element stringu jest charem. W pythonie znak jest stringiem, w C++ niestety nie.

0

Czyli zarówno lewa jak i prawa strona traktowane są jako char, tak? Więc jak w takim razie rozwiązać ten problem?

0

Lewa strona jest stringiem o długości jeden, prawa strona jest znakiem.

0

Nie, lewa strona to string, prawa to char.

nazwa.substr(poz, 1)[0] == zamienniki[i]
0

eh.. to programowanie to twardy orzech do zgryzienia i ciężki kawałek chleba ;) tak czy inaczej dzięki za szybkie odpowiedzi i wyprowadzenie mnie z błędu.

0

Wszyscy coś kombinujecie :P

Czemu:

nazwa.substr(poz, 1)[0];

Co jest złego w:

nazwa[poz];

1 użytkowników online, w tym zalogowanych: 0, gości: 1