2013-12-18 3 views
0

я довольно новый для C++, можете ли вы помочь мне с указателями? У меня есть на структуруобъект из вектора с structs

struct Slice 
{ 
    Slice(): {} 
    SliceObj *slObj; 
}; 

и вектор:

std::vector<Slice> slices; 

Так на mouce прикосновением я хочу взять этот объект, чтобы изменить свою общественную вар:

for (vector<Slice>::iterator it = slices.begin(); it != slices.end(); ++it) { 

      Slice slice0 = slices[0]; 
      SliceObj *slObj = slice0.slObj; 
      slObj->drag(slObj, x, y); 
} 

enter image description here

И Конечно, когда в методе перетаскивания я делаю: slObj-> rect.x = x + 0.1 ;, он ничего хорошего не делает ,

Пожалуйста, помогите мне в этом, я не могу понять, как тщательно получить объект с * с другого объекта из вектора, а затем тщательно изменить его параметр; Проблема в том, «как аккуратно получить SliceObj из slice0», а не адрес var, но этот экземпляр. Так вот мне нужно получить slObj param, что в будущем я могу сделать slObj.rect.x = 1;

UPDATE: когда я сделать slObj-> метод сопротивления я всегда видеть только странное число, например: enter image description here , но затем, когда glutPostRedisplay называется и это перерисовать по методу

void SliceObj::draw(SliceObj *slObj) 

тогда это все хорошо! enter image description here

ответ

1

Вы должны получить доступ к элементу через итератор:

for (vector<Slice>::iterator it = slices.begin(); it != slices.end(); ++it) { 

     Slice& slice0 = *it //Get the element using iterator (Note the reference, is to avoid copy) 
     SliceObj *slObj = slice0.slObj; 
     slObj->drag(slObj, x, y); 
} 

Однако, если у вас есть C++ 11, способный компилятору, можно упростить, используя диапазон на основе для цикла:

for(auto& slObj : slices) 
{ 
    liceObj *slObj = slice0.slObj; 
    slObj->drag(slObj, x, y); 
} 
+0

гм это interestin, теперь эта ошибка: ожидается инициализатор до„и“лексема – gronzzz

+0

В какой версии? C++ 11 или pre C++ 11? – Manu343726

+0

Нет, все хорошо, но в любом случае я вижу только странные цифры, пожалуйста, посмотрите в моем обновлении. – gronzzz

0

Вам нужно использовать итератор, чтобы получить элемент из вектора. Здесь вы всегда получаете первый элемент. Попробуйте это:

for (vector<Slice>::iterator it = slices.begin(); it != slices.end(); ++it) { 

      Slice slice0 = *it //Get the element using iterator 
      SliceObj *slObj = slice0.slObj; 
      slObj->drag(slObj, x, y); 
} 
+0

Sry, я отредактировал мой вопрос, не затруднять в векторе, неисправна «, как тщательно получить SliceObj от slice0 – gronzzz

Смежные вопросы