вопрос в с ++.просто хочу простой способ сделать это / - PullRequest
0 голосов
/ 13 мая 2011

У меня есть класс

класс A {int x;int y}

и

set<A> myset;

как я могу выполнить этот набор?Я хочу коснуться переменной х, у в классе.Спасибо

Ответы [ 3 ]

2 голосов
/ 13 мая 2011

Я хочу коснуться переменной x, y в классе.

В вашем классе x и y являются частными.Члены классов являются закрытыми по умолчанию.Вы не можете просто установить x и y напрямую, иначе вы получите ошибку компилятора.Вам необходимо предоставить способ установки x и y в общедоступном интерфейсе A, например:

class A
{
int x; int y; // these are by default private
public:
   // set X
   void setX(int anX) {x = anX;}

   // set y
   void setY(int aY) {y = aY;}
};

// iterate over preexisting elements
set<A>::iterator iter;
for(iter = myset.begin(); iter != myset.end(); ++iter)
{
   iter->x = 5; // COMPILER ERROR, x is private
   iter->setX(5); //works, calls setter
   iter->setY(6); //works, calls setter

}

Еще одна вещь, которая мешает работе вашего набора, - это отсутствие operator < для сравнения с экземплярамиО. set необходимо, чтобы элементы были упорядоченными и уникальными.

class A
{
   ...
   bool operator < (const A& other) const
   {
       // return true if this < other
       // up to you to define
   }
};
2 голосов
/ 13 мая 2011
set<A>::iterator it;
for(it = myset.begin(); it != myset.end(); ++it)
{
    // your code
}

В качестве альтернативы вы можете использовать Boost :: foreach:

BOOST_FOREACH(A& a, myset)
{
    // your code
}

РЕДАКТИРОВАТЬ: см. Комментарии :) все переменные в A объявлены как частные, поэтому доступ к ним невозможен.Я думаю, что нет другого способа, кроме как настроить класс и предоставить методы получения и установки или сделать переменные-члены открытыми.

0 голосов
/ 13 мая 2011
set<A>::iterator myIterator;
for(myIterator = mySet.begin();
    myIterator != mySet.end();
    myIterator++)
{
 // do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...