2016-04-07 165 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