访问私有类中的公共类函数给出错误

时间:2010-01-06 05:21:51

标签: c++

class test
{
private:
    class privateStruct
    {
    public:
        int m;
        privateStruct(int p){m=p;}
    };
};

void ff()
{
    test::privateStruct ps(4);
    throw ps; //Does not work.. 
}

void main()
{
    try
    {
        ff();
    }
    catch(...)
    {
    }
}

但是以下代码的工作原理

class test
{
private:
    class privateStruct
    {
    public:
        int m;
        privateStruct(int p){m=p;}
    };
};

void ff()
{
    throw test::privateStruct(4); //Work why
}

void main()
{
    try
    {
        ff();
    }
    catch(...)
    {
    }
}

注意:我使用的是VC ++ 6.

我需要回答上述代码的工作原理。

提前致谢:)

3 个答案:

答案 0 :(得分:4)

这是Visual Studio 6.0的旧/已知错误。它在构造临时对象时忽略访问说明符。没有可用的修复程序。

将警告级别提高到3或更高(/ W3)将导致违规代码发出警告。

答案 1 :(得分:1)

你的第二个例子中的代码是有效的,因为Visual C ++ 6因其糟糕的标准符合性而臭名昭着。

它偶然起作用。

答案 2 :(得分:0)

即使是第二个代码段也无法编译。无法在函数ff()中访问privateStruct。