Проблемы с компиляцией gcc
Суть проблемы такая: я писал код под VS2019, и он отлично работал, затем возникла необходимость продолжить писать код под ubuntu. При попытке компиляции увидел кучу красной подсветки под переменной countСoincidences. При наведении получаю данные ошибки:
expected initializer before ‘oincidences’ gcc
stray ‘\241’ in program gcc
И в консоли выдает данную ошибку:
no match for ‘operator<<’ (operand types are ‘std::ostream’ {aka ‘std::basic_ostream’} and ‘’)
Вот исходный код функции:
#include <iostream>
#include <time.h>
#include <vector>
#include <algorithm>
using namespace std;
void bullsCows()
{
srand(time(0));
vector<int> numbers;
for (int i = 1000, j = 0; j < 8999; j++, i++)
{
numbers.push_back(i);
}
for (int i = 1111; i < 9999; i += 1111)
{
numbers.erase(remove(numbers.begin(), numbers.end(), i), numbers.end());
}
int index = rand() % numbers.size();
numbers[index];
int number[4]; //Генерация случайного числа
int numb = rand() % (9999 - 1000 + 1) + 1000;
int tmpVarNumb = numb;
for (int i = 3; i >= 0; i--)
{
number[i] = tmpVarNumb % 10; // Создание массива цифр из загаданного числа
tmpVarNumb /= 10;
}
int countCoincidencesPos;
int countСoincidences;
int numbTwo;
while (true)
{
cin >> numbTwo;
if (numbTwo == numb)
{
// Проверка на угаданное число
cout << "Krasavcheg";
break;
}
int numberTwo[4];
tmpVarNumb = numbTwo;
bool flag = true;
for (int i = 3; i >= 0; i--)
{
numberTwo[i] = tmpVarNumb % 10; // Получение массива цифр из введенного числа
tmpVarNumb /= 10;
}
if (numberTwo[0] == numberTwo[1] == numberTwo[2] == numberTwo[3])
{
cout << "Вы ввели неверное число..."; // Проверка числа
break;
}
countCoincidencesPos = 0;
countСoincidences = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (number[i] == numberTwo[j]) // Проверка быков и коров
{
if (i == j)
countCoincidencesPos++;
else
countСoincidences++;
}
}
}
cout << countСoincidences << " " << countCoincidencesPos << endl; // Вывод результатов
if (countCoincidencesPos == 0 && countСoincidences == 0)
{
for (int j = 0, k = 1000; j < 4; j++, k /= 10)
{
for (int i = 0; i < numbers.size(); i++)
{
if (numberTwo[j] == (numbers[i] / k) % 10)
{
numbers.erase(remove(numbers.begin(), numbers.end(), numbers[i]), numbers.end());
}
}
}
}
}
}
int main()
{
}
Ответы (1 шт):
Потому что переменная int countСoincidences; содержит кириллическую С вместо английской C. Для Visual Studio это ок, clang это тоже нормально переживает, а gcc обижается (и я его понимаю). Но если Вам все таки хочется скомпилировать это прям так, добавьте -fextended-identifiers. Но лучше не используйте кириллические символы в именах переменных.
Возможно, там ещё есть такое, но это уже понятно как фиксить