【发布时间】:2020-07-29 10:36:06
【问题描述】:
我是 C++ 新手。我正在尝试用 OpenGL 做可点击的按钮。我为每个按钮添加回调函数工作了 2 天,我尝试了很多我找到的方法,但我不能这样做。我下面的代码给出了内存错误。我的错在哪里?
main.h
#include <vector>
class Button {
public:
// Storage Vector
static std::vector<Button> Buttons;
// typedef Function
typedef void (*pointerFunction)();
// Constructor
Button(/*Parameters*/);
// Setting Callback
void setCallBack(void(*function)());
// Callback pointer
pointerFunction callback;
int value{ 4 };
};
main.cpp
#include <iostream>
#include "main.h"
std::vector<Button> Button::Buttons;
Button::Button(/*Parameters*/) {
// ...
Button::Buttons.push_back(*this);
}
void Button::setCallBack(void(*function)()) {
this->callback = function;
this->callback(); // Here is work!
}
void testFunction() {
std::cout << "Test\n";
}
void createMember() {
Button classMember;
classMember.setCallBack(&testFunction);
}
int main() {
createMember();
for (Button& button : Button::Buttons) {
std::cout << button.value; // I can access this value.
button.callback(); // But here is give memory error!
}
return 0;
}
【问题讨论】:
-
请不要在问题中添加“问题已解决”。而是将解决您的问题的答案标记为已接受。
标签: c++ class vector initialization construct