• Advertisement
Sign in to follow this  

Problem with functions!

This topic is 2097 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 sad.png.

Some of my 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);
}


It gives me an error:

invalid use of void expression


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
Advertisement
Button button_file,

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


Button button_file,


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 smile.png. 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:

button.func() = func();

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

Please proceed, and write modified piece of code.


function pointers: http://www.cprogramm...n-pointers.html (C way of doing it, only use this if the other two options are unsuitable for you)
std::function: http://en.cppreferen...tional/function (Use this if your compiler is modern enough)
boost::function: http://www.boost.org....html#id1545628 Edited by SimonForsman

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement