[英]Use of undeclared identifier after if/else if branch
P* pFactory(const std::string& pName){
if (p == "s")
SP newP;
else if(pName == "f")
FP newP;
else if(pName == "l")
LP newP;
else if(pName == "i")
IP newP;
else if(pName == "g")
GP newP;
else if (pName == "n")
NP newP;
P* p_ptr = &newP;
return nullptr;
}
基本上,該函數應該返回一個指向根據 pName 輸入生成的新 P 對象的指針。 我在指針行上收到 Use of undeclared identifier 'newP' 錯誤。
我認為這可能是因為沒有最終的 else 所以對象可能永遠不會被創建,但是用 else if 替換最后一個 else 沒有幫助。 是什么導致了這個錯誤?
編輯:
P* newP = nullptr;
if (pName== "s")
newP = new SP;
else if(pName == "f")
newP = new FP;
else if(pName == "l")
newP = new LP;
else if(pName == "i")
newP = new IP;
else if(pName == "g")
newP = new GP;
else if (pName == "n")
newP = new NP;
return newP;
這行得通嗎?
If-else 語句有自己的作用域,因此您無法訪問其中指定的變量。 在 if-else 塊上方聲明變量並在 if-else 內部分配值。
此外,獲取堆棧創建對象的引用並返回它是您能做的最糟糕的事情,因為在函數退出創建懸空指針后,該變量將超出范圍。
您可以利用智能指針為您完成內存管理。
下面是一個示例:
#include <string>
#include <memory>
struct P {};
struct A : public P {};
struct B : public P {};
struct C : public P {};
std::unique_ptr<P> pFactory(const std::string& pName)
{
std::unique_ptr<P> p_ptr;
if (pName == "s")
p_ptr = std::make_unique<A>();
else if (pName == "f")
p_ptr = std::make_unique<B>();
else if (pName == "l")
p_ptr = std::make_unique<C>();
return p_ptr;
}
int main()
{
const auto fFactory = pFactory("f");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.