代码之家  ›  专栏  ›  技术社区  ›  Chris K

在const成员函数中返回C++引用

  •  3
  • Chris K  · 技术社区  · 15 年前

    a的类层次结构如下所示:

    class AbstractDataType { 
    public: 
       virtual int getInfo() = 0;
    }; 
    
    class DataType: public AbstractDataType { 
    public:
       virtual int getInfo() { }; 
    };
    
    class Accessor { 
        DataType data; 
    public: 
        const AbstractDataType& getData() const { 
            return(data); 
        } 
    };
    

    好吧,GCC4.4报告:

    在成员函数__const abstractDataType&accessor::getData()const_: 错误:类型const abstractdatatype&226; from expression of type const datatype的引用初始化无效

    我哪里做错了-这是我的情况吗? 必须 使用指针?

    [编辑-固定分号]

    2 回复  |  直到 15 年前
        1
  •  4
  •   Brian R. Bondy    15 年前

    不,你不需要使用指针。在这种情况下,可以平均使用引用或指针。

    您粘贴的代码应该可以在G++4.4和Visual Studio 2010中工作。类声明后缺少的分号除外。

    我猜这里的代码可能与您正在编译的代码不完全匹配。

    尤其是你在代码中不小心做到了这一点吗?

    class DataType /*: public AbstractDataType*/ { 
    public:
       virtual int getInfo() { }; 
    };
    
        2
  •  0
  •   Peter Ruderman    15 年前

    我没有要测试的GCC副本,但问题可能在于数据周围的括号。编译器可能会将其解释为数据类型的表达式,然后无法将其分配给引用。尝试:

    return data;