我确定对此有一个简单的解释,但我有一些这样的代码:
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()
编辑:这是一些真实的代码。错误是否仍在变量范围内?我在这个例子中意识到,但这仍然是问题吗?我尝试了表单的条件初始化:
RoutingTablePoolEntry rtpe(routeEntryPtr == nullptr? ... : ...);
但似乎也没有太多合作。
编辑#2:我是个白痴,对不起。原因很清楚,我只是没有看到它。
rtpe = RoutingTablePoolEntry(destRouter)
和
rtpePtr = &(rtpeItr->second)
在很小的机会中,任何人都会这样做。
答案 0 :(得分:5)
在if和else之后的语句中声明的每个对象都具有这些语句的范围。在if-else语句之后,对象不可见并且活着。
答案 1 :(得分:1)
你的变量是if语句的本地变量。可能你有一个先前声明的对象,它没有被初始化,因为没有使用。在这种情况下,您会收到警告,如果没有此对象的任何声明,则会出现错误。