我遇到了一个大问题,遗憾的是我无法解决问题。我已将以下课程添加到我的项目中:
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中无效,我将其更改为^,但我不知道这是否正确。
错误消息:" Losowanie Lotto.exe中0x00C99331的第一次机会异常:0xC0000005:访问冲突读取位置0x00000010。
如果存在此异常的处理程序,则可以安全地继续该程序。"
最终我找到了解决方案。必须使用line:
创建对象的实例NavigationContext^ StaticData = ref new NavigationContext();
答案 0 :(得分:0)
"重点是当我尝试调用
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,具体考虑了垃圾收集机制。