'или' не может быть признан? [Дубликат]

Попробуйте ввести код:

XML-файл:




    

    

    


        

    


    

        


        

        

        


        
    

Класс помощника:

public class BottomNavigationViewHelper {
    public static void disableShiftMode(BottomNavigationView view) {
        BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
        try {
            Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
            shiftingMode.setAccessible(true);
            shiftingMode.setBoolean(menuView, false);
            shiftingMode.setAccessible(false);
            for (int i = 0; i < menuView.getChildCount(); i++) {
                BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
                //noinspection RestrictedApi
                item.setShiftingMode(false);
                // set once again checked value, so view will be updated
                //noinspection RestrictedApi
                item.setChecked(item.getItemData().isChecked());
            }
        } catch (NoSuchFieldException e) {
            Log.e("BNVHelper", "Unable to get shift mode field", e);
        } catch (IllegalAccessException e) {
            Log.e("BNVHelper", "Unable to change value of shift mode", e);
        }
    }
}

В действии:

BottomNavigationView bnav = (BottomNavigationView) findViewById(R.id.bottomnav);
BottomNavigationViewHelper.disableShiftMode(bnav);

Файл меню:




4
задан Shafik Yaghmour 17 July 2015 в 18:03
поделиться

3 ответа

Использование /Za, кажется, позволяет их без включения iso646.h, видеть его вживую , следующая программа выдает ошибку, не используя /Za, но работает в противном случае:

int main()
{
    int x = 1, y = 0 ;
    if (x and y)    
    {
    //...  
    }

    return 0;
}

Поскольку ta.speot.is указывает, что / Za отключает расширения, следующая документация указывает, что вы должны включить ios646.h в противном случае:

В разделе / ​​Ze вам нужно включить iso646.h, если вы хотите использовать текстовые формы следующих операторов:

, и в нем перечислены альтернативные токены ниже.

Заметьте, я знал, что видел это раньше, я включаю ссылку на сообщение об ошибке для этого в моем ответе на аналогичный вопрос. Хотя это не относится к обходному пути, отмеченному выше.

Примечание 2: Приветствия и hth. - Alf указывает, что может быть много нежелательных последствий для отключения расширения, и поэтому вам может быть лучше, включая iso646.h.

6
ответ дан Community 20 August 2018 в 23:50
поделиться
  • 1
    не рекомендуется отключать визуальные расширения c ++, потому что тогда вполне вероятно, что код Microsoft не будет компилироваться. вместо этого используйте принудительное включение iso646.h – Cheers and hth. - Alf 24 September 2014 в 04:59
  • 2
    @ Cheersandhth.-Альф спасибо за комментарий, скорректированный ответ. Мне любопытно, есть ли у вас примеры? – Shafik Yaghmour 24 September 2014 в 05:06
  • 3
    например, в том числе <windows.h>. – Cheers and hth. - Alf 24 September 2014 в 05:25

Используйте принудительное включение (опция /FI) заголовка iso646.h.

Для работы в командном интерпретаторе вы можете поместить это в среду CL переменная или, например, в файле ответов.


Отключение расширений языка Visual C ++ с помощью /Za также может сделать трюк за счет рендеринга компилятора бесполезно & ndash; поскольку код Microsoft, такой как заголовки Windows API, обычно использует расширения.

3
ответ дан Cheers and hth. - Alf 20 August 2018 в 23:50
поделиться

В более поздней версии VS (протестировано в версии 15.7.0 Preview 3.0); убедитесь, что для визуальной студии задан режим соответствия:

Затем он компилируется с альтернативными представлениями оператора .

1
ответ дан wally 20 August 2018 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: