Member 14982585 Ответов: 1

Ошибка компилятора; не удалось преобразовать void в bool


Я запускаю эту программу на компиляторе и она возвращает мне следующую ошибку:


Невозможно преобразовать 'стека.с std::стек&ЛТ;тип wchar_t&ГТ;::поп() от пустоты к bool.

Что же мне делать?
#include <string>
#include <stack>
#include <iostream>
using namespace std;

class CheckNumbers
{
public:
	virtual void check(const std::wstring &s)
	{
		std::stack<wchar_t> stack = std::stack<wchar_t>();
		int l = s.length();
		int zeroCounts = 0;
		int onesCounts = 0;
		for (int i = 0;i < l;i++)
		{
			stack.push(s[i]);
		}
		while (!stack.empty())
		{
			if (stack.pop()! == L'0')
			{
				zeroCounts++;
			}
			else
			{
				onesCounts++;
			}
		}
		if (zeroCounts > onesCounts)
		{
			std::wcout << std::wstring(L" 0 occurs most frequently by ") << (zeroCounts - onesCounts) << std::endl;
		}
		else if (zeroCounts < onesCounts)
		{
			std::wcout << std::wstring(L" 1 occurs most frequently by ") << (onesCounts - zeroCounts) << std::endl;
		}
		else
		{
			std::wcout << std::wstring(L" 1 and 0 both occur equal") << std::endl;
		}
	}
};
// Main method class to call the method of CheckNumbers class
class Test
{

	static void main(std::wstring args[])
	{
		(new CheckNumbers())->check(L"010100111");
	}
};


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

Я никогда не сталкивался с такими ошибками, и я довольно новичок в C++

Joe Woodbury

Маленькая точка:

классный тест
{
static void main(std::wstring args[])
{
(новые контрольные номера())->проверка(L"010100111");
}
};

Похоже, он похож на C#. Она протекает. В этом случае я предлагаю объявить экземпляр CheckNumbers и вызвать метод.

Для std::stack<wchar_t> stack = std::stack<wchar_t>(); отбросьте то, что находится от знака равенства до точки с запятой.

Петлю нажима можно было сделать:

для (wchar_t ch : s)
{
стек.толчок(ч);
}

1 Ответов

Рейтинг:
2

KarstenK

То хлопок() функция имеет void в качестве возвращаемого типа, поэтому ее нельзя привести к bool.
Вы должны перестроить свой код:

while (!stack.empty())
{
	if (stack.top() == L'0')//use of top
	{
		zeroCounts++;
	}
	else
	{
		onesCounts++;
	}
	stack.pop();//now pop
}


CPallini

5.

Richard MacCutchan

Где он пытается преобразовать void stack.pop() в bool?