Тернарный оператор. C2446 нет преобразования "const char [2]" в "int"
for (int z = 1; z < MxN; z++)
{
cout << (a[z] == 1 ? z : " ");
}
a[] - массив булей.
Ошибка не в операторе квадратная скобчка, в 1 варианте тернарного оператора
Почему для z обязательно должен быть тип const char*? Особенности тернарного оператора? Или мой кривой код?
Вот код на всякий случай.
int main()
{
ull n;
cin >> n;
const ull MxN = n+1;
bool* a = new bool[MxN];
for (ull i = 1; i < MxN; i++)
{
a[i] = 1;
}
cout.width(10);
for (ull i = 2; i <= MxN/2; i++)
{
for (ull j = 2*i; j < MxN; j += i)
{
for (int z = 1; z < MxN; z++)
{
cout << (a[z] ? z : " ");
}
}
}
delete[] a;
}
Как реализовать то что я хочу, сохраняя краткость кода и не делая много лишних операций?...
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Тернарный код - это выражение. У вас же это выражение пытается быть двух разных типов одновременно в зависимости от значения a[z], что невозможно.
Можно
if (a[z]) cout << z; else cout << " ";
Можно также
a[z] ? cout << z : cout << " ";
Или использовать какой-то общий тип с приведением к нему - например, как предложил @Learpcs.