2013-04-16 12 views
0

Я изучаю, как использовать векторы, и писал простую программу, которая берет некоторую информацию и помещает ее в вектор, а затем повторяет ее. мой источникC++ error no match for 'operator:

int main() 
{ 

    int answer= 1; 
    int decide; 
    int vectCount = 0; 
    vector<animal> pet; 

    while(answer > 0) 
    {  

     pet.push_back(animal()); 
     cout << "enter the name of the pet" << endl; 
     getline(cin,pet[vectCount].name); 

      cout << "Please enter the age of the pet" << endl; 
      cin >> pet[vectCount].age; 

     cout << "enter the weight of the pet" << endl; 
     cin >> pet[vectCount].weight; 


     do 
     { 
     cout << "Please enter the size of the pet S/M/L" << endl; 
     cin >> pet[vectCount].size; 
     }while(pet[vectCount].size != 'L' 
     && pet[vectCount].size != 'M' 
     && pet[vectCount].size != 'S'); 

     answer = question(decide); 

    } 
    vector<animal>::iterator i; 
    for(i = pet.begin(); i != pet.end(); ++i) 
    { 

     cout << "The name of the pet is " << *i->name << endl; 
     cout << "The age of the pet is " << *i->age << endl; 
     cout << "The weight if the pet is " << *i->weight << endl; 
     cout << "The size of your pet is " << *i->size; 
     if(*i->size == 'S') 
     cout << "(-): meow" <<endl; 
     if(*i->size == 'M') 
     cout << "(---): woof" <<endl; 
     if(*i->size == 'L') 
     cout << "(------): moooo" <<endl;    
    } 
    cout << "Exiting the program" << endl; 


    cin.get(); 
    return 0; 
} 

и ошибка, я получаю:

no match for 'operator*' in '*(&i)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator-> [with _Iterator = animal*, _Container = std::vector<animal, std::allocator<animal> >]()->animal::name'

может кто-нибудь помочь мне найти источник проблемы, пожалуйста?

+0

"источник проблемы", - давайте начнем с номером строки, идентифицированного компилятор. –

ответ

4

Это:

*i->size 

должно быть:

i->size 

-> оператор (в вашем случае равно (*i).size) будет автоматически почтительность i.

+0

Это сработало. Спасибо за помощь – user2284606

0

вы получаете эту ошибку, потому что компилятор пытается сделать:

*(i->name) 

Который пытается разыменования i->name, а с i является указателем на объект с name, он потерпит неудачу.

Тогда как, что вы хотите:

(*i).name 

или

i->name 

который будет разыменовать i, прежде чем пытаться взять имя из структуры.

0

Вы должны использовать:

i -> size 

или

(*i).size 

, но не так, как вы использовали.

0

попытка удаления "*", изменив

cout << "The name of the pet is " << *i->name << endl; 

в

cout << "The name of the pet is " << i->name << endl; 

или

cout << "The name of the pet is " << (*i).name << endl; 
Смежные вопросы