Я надеюсь, что кто-то может мне помочь. Чтобы быть более конкретным в отношении того, что мне действительно нужно, и урезать мой код, я изменил с того, что у меня есть вектор чисто моего класса, чтобы иметь вектор объектов нового класса, из которых мой оригинальный класс является типом в.Итерация через вектор, который содержит пользовательский класс C++
Надеюсь, я четко объяснил это до этого момента. Я покажу соответствующие классы:
class screen_area
{
private:
int my_id, my_x, my_y, my_width, my_height;
bool active=true;
public:
screen_area (int button_id=0, int x=0, int y=0, int width=0, int height=0, bool isactive=true)
{
my_id = button_id;
my_x = x;
my_y = y;
my_width = width;
my_height = height;
active = isactive;
}
~screen_area()
{}
class bet
{
private:
int wager = 0;
int multiplier = 0;
public:
screen_area area;
bet(int wager, int multiplier, screen_area area)
{};
~bet()
{};
Есть немного больше для них, но это хлеб и масло. Теперь ранее я использовал функцию-член в «screenarea», чтобы вернуть любое значение, я хотел от конкретного объекта:
int getvalue(int value)
{
switch(value)
{
case 1 :
return my_id;
case 2 :
return my_x;
case 3 :
return my_y;
case 4 :
return my_width;
case 5 :
return my_height;
case 6 :
return active;
}
}
И я изменил функцию поиска для использования этой функции члена на screenarea, которая является тип, содержащийся в «ставке».
int returnbuttonid(int mousex, int mousey, std::vector<bet> *buttons)
{
for (auto ep : *buttons)
{
if ((ep.area.getvalue(2) > mousex) && (ep.area.getvalue(3) > mousey))
{int id_value = ep.area.getvalue(1);
return id_value;
}
}
}
Однако ... он возвращает мусор. Мне явно чего-то не хватает, но я все это логически, и все это, кажется, имеет смысл.
Извините заранее, если это что-то простое! И я ценю, что это может показаться длинным, но я бы очень признателен за помощь!
И просто супер понятно ... вот как я называю это:
vector<bet> localbuttons; //Declaration of Vector
load_map("data.dat", &localbuttons); //load buttonmap using function
int buttonpressed = returnbuttonid(100,300, &localbuttons);
В ответ на очень скорое комментарий. Понятно, что проблема, по крайней мере, начинается с неопубликованного фрагмента кода. Мой вектор «ставки» не заполняется аргументами, которые я передаю ему, когда я пытаюсь перегрузить конструктор. Я предположил, что правильно исправил синтаксис, когда создал новый класс «ставка», но после проверки вектора он не показывает никаких данных.
В моей функции load_map:
bool load_map(std::string path, std::vector<bet> *buttons)
{
//setup file
ifstream inputFile(path.c_str());
//
//The stuff in the middle here is irrelevant
//and I've take it out to make this tidier
buttons->push_back(bet(0,0, screen_area(id,x,y,width,height, true)));
}
return 0;
}
Теперь только часть этого, что изменилось с тех пор у меня была эта функция работала является:
buttons->push_back(bet(0,0, screen_area(id,x,y,width,height, true)));
Так что я предполагаю, что это, где проблема берет свое начало. Переменные не перегружают конструктор screen_area по умолчанию. Поэтому, когда я:
cout << localbuttons[1].area.my_id << endl;
Я всегда вижу любое значение, которое я размещаю в конструкторе по умолчанию. Это «0» в конструкторе, который я разместил здесь, но если я его изменю, он изменится соответствующим образом.
И я не должен был говорить мусор, я был виноват в том, что думал, что правильно определил область проблемы и постараюсь быть кратким. Поэтому, я думаю, я должен сначала спросить ... Как я могу правильно перегрузить конструктор «screenarea»?
«Он возвращает мусор» не предоставляет достаточной информации о проблеме для тех, кто действительно поможет вам. Есть несколько проблем с кодом, который вы показали, но без [mcve] почти невозможно узнать, где проблема (что бы это ни было). Вы проверяете, работает ли 'load_map()'? Имеет ли вектор данные, которые, по вашему мнению, он делает? Прошли ли вы в отладчике, чтобы узнать, в чем смысл «мусора»? –
ОК за эту обратную связь. Я уточню вопрос, чтобы ответить на то, что вы указали! –