我遇到了一个大问题,可惜我无法解决它。我已将以下类添加到我的项目中:
ref class NavigationContext sealed
{
private:
int combobox1;
int combobox2;
int combobox3;
public:
NavigationContext();
public:
int rcombobox_1() {
return combobox1;
}
};
NavigationContext^ StaticData;
关键是当我尝试调用"int rcombobox_1()"函数时,我收到访问冲突错误。为什么?有没有其他方法可以从私有变量中检索数据?
我不得不修改你的代码,因为它不想被编译。现在它看起来像这样:
ref class NavigationContext sealed
{
private:
int combobox1;
int combobox2;
int combobox3;
private:
NavigationContext();
NavigationContext(const NavigationContext^);
NavigationContext^ operator=(const NavigationContext^);
public:
static NavigationContext^ instance() {
static NavigationContext^ theInstance;
return theInstance;
}
int rcombobox_1() {
return combobox1;
}
};
。我使用了您的来电线路,但它仍然不起作用。"&"符号在我的 IDE 中不起作用,我将其更改为 ^,但我不知道它是否正确。
错误消息:"洛索瓦尼乐透0x00C99331的首次机会异常.exe: 0xC0000005:访问违规读取位置0x00000010。
如果存在此异常的处理程序,则可以安全地继续该程序。
最终我找到了解决方案。对象的实例必须使用行创建:
NavigationContext^ StaticData = ref new NavigationContext();
"关键是当我尝试调用
int rcombobox_1()
函数时,我会收到访问违规错误。为什么?
您正在取消引用未分配给 NavigationContext
的有效实例的指针。
"有没有其他方法可以从私有变量中检索数据?"
我与您的 getter 函数没有任何关系,这没关系。
至于评论
"你在哪里为这个指针分配了内存?"
"对不起,我是初学者。我该怎么做?"
看起来你想要一个类似单例的东西,而不是一个全局(未初始化的)指针:
ref class NavigationContext sealed {
private:
int combobox1;
int combobox2;
int combobox3;
NavigationContext();
NavigationContext(const NavigationContext&);
NavigationContext& operator=(const NavigationContext&);
public:
static NavigationContext& instance() {
static NavigationContext theInstance; // <<< This statement
// allocates the
// memory.
return theInstance;
}
int rcombobox_1() {
return combobox1;
}
};
调用方语法:
int rcCombo1 = NavigationContext::instance().rcombobox_1();
可能还有其他解决方案专门标记为 c++-cli,它们考虑了垃圾回收机制。