嗨,大家好,我昨天开始学习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);
}
}
}
我创建潜在对象的所有类都是从基类StockItem派生的
答案 0 :(得分:2)
t
不适合您使用。您在if
语句之后在块中声明了它。相反,您应该在代码块之前将其声明为基类,并在每个if语句之后将其初始化为子类(您应该使用switch
代替它,但这不是代码查看)
答案 1 :(得分:1)
在C ++中,所有循环和if
子句都有自己的范围。因此,您应该在t
子句之外声明if
,并且应该在循环之外声明list
。此外,C ++是具有严格变量类型的语言,因此您无法更改t
的类型,也无法将不同类型的值推送到列表中。为此,您应该使用没有类型的指针void*
或创建父类,并从该类派生用于t
的所有不同类型(然后你冷使用指向基类的指针在这种情况下t
)。如果你不知道如何做到这一点,你最好在C ++中阅读一些关于面向对象编程的书籍,在这个答案中解释的主题太多了。
关于这个主题的好书可能是Bjarne Stroustrup的书之一,例如here。