2016-04-07 207 views
-4

嗨,大家好,我昨天開始學習C++。't'未在此範圍內聲明

我想創建依賴於我從文件中讀取的值的對象。然而它是說價值t沒有在範圍內聲明:

另外我明白,如果我做我的代碼的方式不一定是最佳實踐。作爲一般的編碼概念,我不知道我怎麼會初始化牛逼事先爲我創建的對象取決於給予

這裏的價值是代碼:

while(getline(linestream,value,',')){ 
      if(i==0){ 
       cout<< "Type " << value << endl; 
       type = value; 
      } 
      else if(i==1){ 
       cout<< "Code " << value << endl; 
       code = value; 
      } 
      else if (i==2){ 
       cout << "Count " << value << endl; 
       count = atoi(value.c_str()); 
      } 
      else if (i ==3){ 
       cout << "Price " << value << endl; 
       price = atoi(value.c_str()); 
      } 
      else if(i ==4){ 
       cout << "Other " << value << endl; 
       other = value; 
      } 
      i++; 
      if(i ==5){ 
       if(type == "transistor"){ 
        Transistor *t = new Transistor(code,count,price,other); 
       }else if (type == "IC"){ 
        IC *t = new IC(code,count,price,other); 
       }else if (type == "resistor"){ 
        Resistor *t = new Resistor(code,count,price,other); 
       }else if (type == "capacitor"){ 
        Capacitor *t = new Capacitor(code,count,price,other); 
       }else{ 
        Diode *t = new Diode(code,count,price,other); 
       } 

       if(counter ==0){ 
        LinkedList list(t); 
       }else{ 
        list.tailAppend(t); 
       } 
      } 
     } 

而且所有的課,我創建潛在的對象都是從基類派生的股票項目

+1

是'Transistor','Resistor'等某些類的所有子類(例如'Component')嗎?如果是這樣,那麼你可以在if檢查之前聲明一個'Component * t',然後根據執行的'if'語句使用多態來初始化它。 – ArchbishopOfBanterbury

+0

是@ArchbishopOfBanterbury(愛這個名字btw)他們都是從一個基類派生出來的,但是它的抽象基類 – Blarsssss

+1

@Brasssss沒關係,你仍然可以創建一個指向這個基類的指針,然後爲它指派一個派生的實例如你在'if'檢查中所做的那樣 - 例如:首先聲明'Base * t',然後對每個if語句執行't = new Transistor(...)'等等。 – ArchbishopOfBanterbury

回答

2

t不在您使用的正確範圍內。您在if聲明之後的塊中聲明瞭它。相反,你應該在代碼塊之前聲明它爲基類,並在每個if語句之後將它初始化爲子類(這應該真的使用switch代替,但這不是代碼概述)

+1

'list'也有同樣的問題。 – SergeyA

+0

無效的抽象類型的新表達 – Blarsssss

+0

@Blarsssss,做什麼? –

1

在C++中,所有循環和if子句有自己的範圍。因此,您應該在if子句外聲明t,並且您應該在循環的外部聲明list。此外,C++是具有嚴格變量類型的語言,因此您無法更改t的類型,也無法將不同類型的值推送到列表中。要做到這一點,你應該使用沒有類型的指針void*或創建一個父類,並從該類派生所有用於t的不同類型(然後在這種情況下,你可以使用指向基類的指針t)。如果你不知道如何做到這一點,那麼你最好閱讀一些關於C++面向對象編程的書籍,這個解釋太廣泛了。

關於這個主題的好書可能是Bjarne Stroustrup發現的書籍之一,例如,here