2015-05-20 28 views
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; 

}

請看看我的代碼。

+1

如果有疑問,請打印出typeid-name,請參閱此處的示例:http://en.cppreference.com/w/cpp/language/typeid – stefaanv

回答

1

sArray[0]&item這兩種類型都是SweetItem*指針,它與Candy對象決不會相同。

我想你想要typeid(*sArray[0])typeid(item),來檢查對象的動態類型,而不是一個更通用的類型指針。

+0

謝謝mike!沒關係知道:) –