Передача значений переменной в другую функцию С++
И снова здравия вам люди добрые. Суть проблемы такова. Есть у меня переменная, значение которой после прохождения через void menu() меняется. Далее нужно каким-то образом перенести это значение в int main(). Пробовал исользовать глобальную переменную, но натыкался на то, что значение ее меняется только внутри первой функции, а во вторую переходит глобальное значение, которое было задано с самого начала.
using namespace sf;
int dif=0, easy=1, hard=2;
void menu(RenderWindow & app)
{
...
bool isMenu = 1;
int menuNum = 0;
while (isMenu)
{
...
if (Mouse::isButtonPressed(Mouse::Left))/
{
if (menuNum == 1)
{
::dif=::easy;
isMenu = false;
}
if (menuNum == 2)
{
::dif=::hard;
isMenu = false;
}
if (menuNum == 3) { app.close(); isMenu = false; }
}
...
}
}
int main()
{
std::ofstream out;
out.open("param.txt");
if (out.is_open())
{
if(dif==easy) out << "256 " << "4" << std::endl;
if(dif==hard) out << "512 " << "8" << std::endl;
else out << "not found" << std::endl;
}
...
}
Ответы (1 шт):
Пришлось заново перечитывать матчасть по указателям, но оно того стоило. Костыльно, но работает. Объявил глобально переменную TheOne и указатель на нее TheTwo, с которым далее и работал.
#include <SFML/Graphics.hpp>
#include <iostream>
#include <windows.h>
#include <fstream>
using namespace sf;
int TheOne=0;
int *TheTwo=&TheOne;
void menu(RenderWindow & app)
{
Texture menuTextureEasy, menuTextureHard, menuTextureExit, menuBackground;
menuTextureEasy.loadFromFile("images/easy.png");
menuTextureHard.loadFromFile("images/hard.png");
menuTextureExit.loadFromFile("images/exit.png");
menuBackground.loadFromFile("images/background.png");
Sprite menu1(menuTextureEasy), menu2(menuTextureHard), menu3(menuTextureExit), menuBg(menuBackground);
bool isMenu = 1;
int menuNum = 0;
menu1.setPosition(180, 180);
menu2.setPosition(180, 250);
menu3.setPosition(180, 320);
while (isMenu)
{
menu1.setColor(Color::White);
menu2.setColor(Color::White);
menu3.setColor(Color::White);
menuNum = 0;
app.clear(Color(129, 181, 221));
if (IntRect(180, 180, 300, 50).contains(Mouse::getPosition(app))) { menu1.setColor(Color::Green); menuNum = 1; }
if (IntRect(180, 250, 300, 50).contains(Mouse::getPosition(app))) { menu2.setColor(Color::Blue); menuNum = 2; }
if (IntRect(180, 320, 300, 50).contains(Mouse::getPosition(app))) { menu3.setColor(Color::Red); menuNum = 3; }
if (Mouse::isButtonPressed(Mouse::Left))
{
if (menuNum == 1)
{
( *TheTwo)+=1;
//system("start Sb4_Puzzle.exe");
isMenu = false;
}
if (menuNum == 2)
{
( *TheTwo)+=2;
//system("start Sb4_Puzzle.exe");
isMenu = false;
}
if (menuNum == 3) { app.close(); isMenu = false; }
}
app.draw(menuBg);
app.draw(menu1);
app.draw(menu2);
app.draw(menu3);
app.display();
}
}
int main()
{
ShowWindow(GetConsoleWindow(), SW_HIDE);
RenderWindow app(VideoMode(512,512), "Main menu");
menu(app);
app.setFramerateLimit(60);
std::ofstream out;
out.open("param.txt");
if (out.is_open())
{
if(*TheTwo==1) out << "256 " << "4" << std::endl;
if(*TheTwo==2) out << "512 " << "8" << std::endl;
}
}
Сама программа представляет из себя менюшку к игре, где можно выбрать уровень сложности или вовсе выйти из игры. Комментарии постирал, поскольку здесь они в абракадабру превращаются.