C++ Visual Studio 2013 - Windows Phone(访问冲突错误)



我遇到了一个大问题,可惜我无法解决它。我已将以下类添加到我的项目中:

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,它们考虑了垃圾回收机制。

最新更新