2016-07-25 4 views
-1

Я уверен, что есть простое объяснение для этого, но у меня есть некоторый код, как это:C++ компилятор дает инициализированы переменные предупреждения при объявлении, если-иначе заявления

RoutingTablePoolEntry rtpe; 
    RoutingTablePoolEntry* rtpePtr; 

    if (rtpeItr == m_rtpool.end()) { 
    RoutingTableEntry* routeEntryPtr = m_nlsr.getRoutingTable() 
     .findRoutingTableEntry(destRouter); 

    if (routeEntryPtr == nullptr) { 
     RoutingTablePoolEntry rtpe(destRouter); 
    } 
    else { 
     RoutingTablePoolEntry rtpe(*routeEntryPtr); 
    } 

    RoutingTablePoolEntry* rtpePtr = addRtpeToPool(rtpe); 
    } 
    else { 
    RoutingTablePoolEntry* rtpePtr = &(rtpeItr->second); 
    } 
    doSomeStuffWithRtpe() 

EDIT: Вот некоторые реальный код. Является ли ошибка все еще переменной областью? Я понимаю в этом примере, но это проблема? Я пробовал условную инициализацию формы: RoutingTablePoolEntry rtpe(routeEntryPtr == nullptr? ... : ...);, но это тоже не слишком помогло.

EDIT # 2: Я идиот, извините. Причина совершенно ясна, и я просто этого не видел.

rtpe = RoutingTablePoolEntry(destRouter) и rtpePtr = &(rtpeItr->second) в тонкий шанс, кто делает этот багор, тоже.

+3

Пожалуйста, напишите [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). Обратите внимание, что 'doThing' не увидит ни один из« объектов », объявленных в вашем коде, потому что они недоступны. – MikeCAT

ответ

5

Каждый объект, объявленный в операторах, следующих за if и else, имеет объем этих операторов. После выражения if-else объект не отображается и не отображается.

1

Ваши переменные являются локальными для оператора if. Возможно, у вас есть предыдущее объявление объекта, которое не инициализировано, потому что оно не используется. В этой ситуации вы получаете предупреждение, без какого-либо предыдущего объявления этого объекта, вы получаете сообщение об ошибке.

 Смежные вопросы

  • Нет связанных вопросов^_^