【问题标题】:Setting private properties of a class using its public methods, c++使用其公共方法设置类的私有属性,c ++
【发布时间】:2012-10-29 23:30:25
【问题描述】:

类似这样的:

class someclass
{
public:
    someclass();
    ~someclass();

    long   Set(int x, int y);

private:
        int _x;
        int _y;
};

long   Set(int x, int y)
{
   _x = x;
   _y = y;
}

但是如果你只是写这样的东西,在 Set() 函数中是无法识别 _x 的。那么如何使用自己的方法设置类的私有属性呢?非常感谢。

【问题讨论】:

    标签: c++ class methods properties private


    【解决方案1】:

    你有一个范围界定问题。这应该有效:

    long someclass::Set(int x, int y)
    {
       _x = x;
       _y = y;
    }
    

    【讨论】:

    • 谢谢。 build 没有问题,但是运行这个程序,在 _x = x; 处出现错误我收到此错误:IntelIPP.exe 中 0x00e52309 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000004。
    【解决方案2】:

    当您在其类定义之外定义成员函数时,您必须适当地对其范围进行调整:

    long someClass::Set(int x, int y)
    {
      _x = x;
     _y = y;
    }
    

    你写的定义了一个不相关的全局函数Set

    另外,Set 的返回类型可能应该是 void(或者你必须从它返回一些东西)。

    【讨论】:

    • 谢谢,但我收到此错误:IntelIPP.exe 中 0x00e52309 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000004。
    • 好像_x没有初始化,所以基本是NULL。所以即使 x 得到了正确的值,它也不能被赋值。
    • @NickTsui 你能显示调用Set()的代码吗?从错误中,我猜你是通过指向someClass 的指针访问它,即NULL
    【解决方案3】:

    您实际上是一个错字。你已经声明了一个成员函数:

    class someclass
    {
    public:
        long   Set(int x, int y);
    

    ...但是实现了一个完全不同的,免费功能:

    long   Set(int x, int y)
    {
       _x = x;
       _y = y;
    }
    

    将后者改为:

    long   someclass:Set(int x, int y)
    {
       _x = x;
       _y = y;
    }
    

    【讨论】:

    • 谢谢,但我收到此错误:IntelIPP.exe 中 0x00e52309 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000004。
    • 好像_x没有初始化,所以基本是NULL。所以即使 x 得到了正确的值,它也不能被赋值。
    猜你喜欢
    • 2015-06-09
    • 2013-10-06
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2013-06-08
    • 2011-12-08
    相关资源
    最近更新 更多