Это C ++, не используйте макросы для констант:
#define MAX_PORTS 3
Вместо этого используйте переменную const
:
const int max_ports = 3;
Почему вы создаете эту переменную в куче?
Counter *counter = new Counter(3);
counter->age = 1;
counter->id = 12;
counter->pincode = 123;
C ++ - это не Java или C #, не делайте этого.Вы не можете delete
эти переменные, поэтому вы теряете память.Не делай этого.Это правильный путь:
Counter counter(3);
counter.age = 1;
counter.id = 12;
counter.pincode = 123;
Затем либо измените setCounterData
, чтобы получить ссылку, либо передайте адрес объекта:
counter->storeCounterData(&counter,1);
Вы индексируете в векторесо значениями 1
, 2
и 3
, но вектор имеет только три элемента, поэтому правильные индексы: 0
, 1
и 2
.Выполнение vecData[user]
, когда user==3
и vecData.size()==3
- серьезная ошибка.Не делайте этого.
Почему вы всегда используете vecData[1]
вместо использования итератора?
std::vector<Counter>::iterator it;
for( it = vecData.begin(); it != vecData.end(); ++it)
{
std::cout<<vecData[1].age<<std::endl;
std::cout<<vecData[1].id<<std::endl;
std::cout<<vecData[1].pincode<<std::endl;
}
Вы, вероятно, имели в виду это:
std::vector<Counter>::iterator it;
for( it = vecData.begin(); it != vecData.end(); ++it)
{
std::cout<<it->age<<std::endl;
std::cout<<it->id<<std::endl;
std::cout<<it->pincode<<std::endl;
}
Илинамного проще:
for (auto& c : vecData)
{
std::cout << c.age << std::endl;
std::cout << c.id << std::endl;
std::cout << c.pincode << std::endl;
}
(и обратите внимание, насколько проще читать это с пробелами вокруг операторов <<
).
, когда я пытаюсь получить эти данныеЯ получаю значение как 0
Причина, по которой вы всегда печатаете 0, заключается в том, что вы получаете данные из незаполненного вектора, который содержит только три новых объекта Counter
:
Counter *count = new Counter(3);
count->getCounterData(counterData);
Вы не сохранили никаких значений в count->vecData[1]
, поэтому распечатанные значения являются просто значениями по умолчанию, созданными конструктором Counter
, который не может инициализировать свои элементы:
Counter::Counter()
{
}
Это означает, что переменные-члены являются просто мусором.Вы получаете нули, потому что ваша программа только что запустилась, поэтому куча оказывается заполненной нулями, но на самом деле это неопределенное поведение для чтения этих переменных.
Ваш класс Counter
должен правильно инициализировать эти члены:
class Counter
{
private:
std::vector<Counter> vecData; // vectors
public:
Counter();
Counter(int vecSize);
int age = 0;
int id = 0;
int pincode = 0;
void storeCounterData(Counter *counter,int user);
void getCounterData(std::vector<Counter> &counter);
};