1
這是我的代碼的一部分。問題是爲什麼使用這一行返回FLASE,我不能進入他的塊: 我試圖檢查我的項目類型是否等於兒子。 它假設返回true。我在調試中看到它也是如此。typeid操作符的奇怪行爲 - 返回FALSE始終爲
if ((typeid(Candy) == typeid(sArray[0])) && (typeid(Candy) == typeid(&item)))
這是我的代碼:
bool Customer::isExistItem(SweetItem& item){
if (Itemsize == 0){
sArray = new SweetItem*[Itemsize + 1];
sArray[Itemsize] = &item;
Itemsize++;
if ((typeid(Candy) == typeid(sArray[0])) && (typeid(Candy) == typeid(&item))){
Candy* help1 = dynamic_cast <Candy*> (sArray[0]);
Candy* help2 = dynamic_cast <Candy*> (&item);
if (*help1 == *help2){ //The first item in the basket!
double payment = 0;
payment += help1->getPrice();
totalPayment(payment);
}
return TRUE;
}
else if ((typeid(Cookie*) == typeid(sArray[0])) && (typeid(Cookie*) == typeid(&item))){
Cookie* help1 = dynamic_cast <Cookie*> (sArray[0]);
Cookie* help2 = dynamic_cast <Cookie*> (&item);
if (*help1 == *help2){ //The first item in the basket!
double payment = 0;
payment += help1->getPrice();
totalPayment(payment);
}
return TRUE;
}
else if ((typeid(IceCream*) == typeid(sArray[0])) && (typeid(IceCream*) == typeid(&item))){
IceCream* help1 = dynamic_cast <IceCream*> (sArray[0]);
IceCream* help2 = dynamic_cast <IceCream*> (&item);
if (*help1 == *help2){ //The first item in the basket!
double payment = 0;
payment += help1->getPrice();
totalPayment(payment);
}
return TRUE;
}
else if ((typeid(Cookielida*) == typeid(sArray[0])) && (typeid(Cookielida*) == typeid(&item))){
Cookielida* help1 = dynamic_cast <Cookielida*> (sArray[0]);
Cookielida* help2 = dynamic_cast <Cookielida*> (&item);
if (*help1 == *help2){ //The first item in the basket!
double payment = 0;
payment += help1->getPrice();
totalPayment(payment);
}
return TRUE;
}
}
這是我的==操作符,看起來OK:
bool Customer::operator ==(const SweetItem& other) const{
for (int i = 0; i < Itemsize; i++){
if (sArray[i] != &other)
return FALSE;
}
return TRUE;
}
請看看我的代碼。
如果有疑問,請打印出typeid-name,請參閱此處的示例:http://en.cppreference.com/w/cpp/language/typeid – stefaanv