Тернарный оператор. 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.

→ Ссылка