我可以将外部类的成员函数声明为内部类中的友元函数

时间:2013-05-30 08:29:22

标签: c++ visual-c++

我有一个类管理文件的内容并将文件转换为二进制缓冲区,我有一个内部类,它是文件中的一个元素(基本上它代表一行)。像:

class CSR{
private:
    //some fields
public:
    Elem operator[](int numRow);
    //other methods
public:
    class Elem{
        private:
            //other fields
        public:
            friend CSR::Elem CSR::operator[]( int r );
    };
};

编译器(VS 2012 Express)告诉" CSR没有成员运营商[]"

2 个答案:

答案 0 :(得分:0)

我不确定语言规则是什么,但前方声明Elem似乎让gcc 4.7和VS 2010都满意:

class CSR{
private:
    //some fields
public:
    class Elem;
    Elem operator[](int numRow);
    //other methods
public:
    class Elem{
        private:
            //other fields
        public:
            friend CSR::Elem CSR::operator[]( int r );
    };
};

答案 1 :(得分:0)

你需要对你内心阶级的前瞻声明 - 但不幸的是,这是不允许的 This post有一些可能的解决方法 - 没有一个特别有吸引力。