Sign in to follow this  

Problem with functions!

This topic is 1970 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I would like to create buttons. And when you click them, do some functions.
But i have problem with button actions [img]http://public.gamedev.net//public/style_emoticons/default/sad.png[/img].

Some of my code:

[CODE]
//---- Header File----
class Button{
public:
//variables initiating like float x,y,z...
void func(void);
void draw(){
//Some drawing
}
void CheckButtonClick(float mx, float my,int key,int state){
if(mx >= x && mx <= x+w &&
my >= y && my <= y+h &&
state == 0 && key == 0){
click = true;
func();
}else
click = false;
}
};

//----Main File----

void AddButton(Button &button,string text,void func(),float x,float y,float z,float w,float h,float s,float r,float g,float b,GLuint tex,GLuint clicktex){
button.tex = tex;
button.clicktex = clicktex;
button.func() = func();
button.textsize = s;
button.text = text;
button.x = x;
button.y = y;
button.z = z;
button.w = w;
button.h = h;
button.color[0] = r;
button.color[1] = g;
button.color[2] = b;
}


Button button_file,

void close(){
exit(0);
}


void InitRendering(){

_buttondark = loadTexture ("Data/IvoGui/buttondark.tga");
_buttondark_click = loadTexture ("Data/IvoGui/buttondark_click.tga");

AddButton(button_help,"Pomoc",close(),133,5,0.001f,64,16,0.9f,1.0f,1.0f,1.0f,_buttondark,_buttondark_click);
}
[/CODE]

It gives me an error:
[CODE]
invalid use of void expression
[/CODE]

Without button actions everything works fine.
Can you help me with this actions?

Thanks in advance. Edited by iwoplaza

Share this post


Link to post
Share on other sites
[CODE]Button button_file,[/CODE]

I think you mistyped a semicolon here, but I'm pretty sure it's a copy/paste mistake. This is followed by a "void", which explains the error message (C++ compiler errors generally make no sense if you made a typo, so you have to look through to try and find it), but I doubt this is the source of the error, could you post the revised code if this is so?

Share this post


Link to post
Share on other sites
[quote]
[CODE]
Button button_file,
[/CODE]

I think you mistyped a semicolon here, but I'm pretty sure it's a copy/paste mistake. This is followed by a "void", which explains the error message (C++ compiler errors generally make no sense if you made a typo, so you have to look through to try and find it), but I doubt this is the source of the error, could you post the revised code if this is so?
[/quote]

"Button button_file," was a copy/paste mistake [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]. But if you want i can give you code that is needed (some of header file, some of main that is about button), or a full code for a further investigation. Edited by iwoplaza

Share this post


Link to post
Share on other sites
This is not legal:
[code]
button.func() = func();
[/code]
You cannot assign to a function. In your current code, you would have to create a concrete implementation of Button::func.

If you have a newish compiler you can handle this using std::function. If you are using an older compiler and cannot upgrade, boost::function is an option. You could also fall back to function pointers for simple functions, and a pure virtual interface class for more complex scenarios.

Share this post


Link to post
Share on other sites
You have declared a function. C++ requires this function to have a single definition.

You appear to want to design a callback system, where you can given different Buttons different functions to call when they are clicked. C++ doesn't have "first class" support for this at the language level, but it can be simulated using the approaches I've outlined.

Share this post


Link to post
Share on other sites
[quote name='iwoplaza' timestamp='1343049974' post='4962236']
Please proceed, and write modified piece of code.
[/quote]

function pointers: [url="http://www.cprogramming.com/tutorial/function-pointers.html"]http://www.cprogramm...n-pointers.html[/url] (C way of doing it, only use this if the other two options are unsuitable for you)
std::function: [url="http://en.cppreference.com/w/cpp/utility/functional/function"]http://en.cppreferen...tional/function[/url] (Use this if your compiler is modern enough)
boost::function: [url="http://www.boost.org/doc/libs/1_50_0/doc/html/function/tutorial.html#id1545628"]http://www.boost.org....html#id1545628[/url] Edited by SimonForsman

Share this post


Link to post
Share on other sites

This topic is 1970 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this