Я объявил приоритетную очередь в main, и при выполнении определенных условий в операторах if я использую emplace, чтобы добавить объект в очередь. К сожалению, после выхода оператора if очередь кажется пустой. Я проверил, не добавила ли моя очередь объект вообще, и оказалось, что, находясь в области видимости, объект находится в очереди.
Я вставлю часть кода, который я использую здесь. Извините, если это глупый вопрос или я использую этот сайт неправильно, я знаю, насколько строгие правила здесь, но я искал ответ на сайте и в других местах.
int main()
{
int control= 0;
while (control!= -1)
{
int menue_control = 0;
priority_queue<object> neg;
priority_queue<object> pos;
priority_queue<double> test;
cout << "\n pos Empty? " << pos.empty();//1
cout << "\n negEmpty? " << neg.empty();//1
cout << "\n testEmpty? " << test.empty();//1
//after I run though the if statements once, these return to be emptystd::cout << "\nmenu stuff: Quit\n\n";
std::cin >> menu;
if (menu == 1)
{
std::cout << "You have selected first Menu option:\n ";
std::cout << "\nSubmenu:Enter 1 to do OT1 or enter 2 for OT2 ";
int OT;
std::cin >> OT;
string name;
int num;
double val;
if (OT== 1)
{
std::cout << "name: ";
std::cin >> name;
std::cout << "Enter number : ";
std::cin >> num;
std::cout << "Enter 1 for thing, enter 2 for other thing: ";
int aaa;
std::cin >> aaa;
if (aaa== 1)
{
std::cout << "Enter val:";
std::cin >> val;
pos.emplace(name, num, val);
test.emplace(val);
cout << "\n posEmpty? " << pos.empty();//0
cout << "\n neg Empty? " << neg.empty();//1
cout << "\n test Empty? " << test.empty();//0
int difference;
if (!pos.empty() && !neg.empty()) {
diff= neg.top() - pos.top();
if (diff> 0)
{
neg.emplace(name, diff, val);
}
if (diff< 0)
{
pos.emplace(name, -1 * diff, val);
}
else
{
std::cout << "done:\n";
}
}
}
if (aaa== 2)
{
}}
if (OT== 2)
{
std::cout << "Enter name: ";
std::cin >> name;
std::cout << "Enter number ";
std::cin >> num;
std::cout << "Enter 1 for thing, enter 2 for other thing: ";
int aaa;
std::cin >> aaa;
if (aaa== 1)
{
std::cout << "Etner selling price: ";
std::cin >> val;
neg.emplace(name, num, val);
test.emplace(val);cout << "\n pos Empty? " << pos.empty();//1
cout << "\n neg Empty? " << neg.empty();//0
cout << "\n tes Empty? " << tes.empty();//0if (!pos.empty() && !neg.empty()) {
int diff = pos.top() - neg.top();
std::cout << "GOT HERE NOW!";
if (difference > 0)
{neg.emplace(name, diff, val);
}
if (diff< 0)
{
pos.emplace(name, -1 * diff, val);
}
else
{
std::cout << "order completely filled:\n";
}
}
}
if (aaa== 2)
{
//do stuff
}
}
}
//A bunch of if menu statements here that are empty
if (menu == 6) { control= -1; }
}
return 0;
}
Когда ваш цикл while заканчивается, ваша приоритетная очередь выходит за рамки видимости. В его точке вы не можете получить доступ к его стоимости.
Я удивлен, что это скомпилировано для вас, это не здесь. Вы должны скомпилировать его с -Wall и избавиться от всех ошибок и предупреждений. Это показало бы вашу ошибку.
Других решений пока нет …