C2663 - 无法查看const vs nonConst问题

时间:2014-10-27 10:47:37

标签: c++

编译以下代码时,我一直收到C2663错误。对SO的搜索显示C2663指向const /非const不匹配,但是我在代码中看不到这个问题。

仍然重现错误的简化代码是

template <class QType> class QBound
{
    public:
    QType xMinVal, xMaxVal, xValStep, xCurrVal;
};

class QBounds
{
    friend class QBoundsHolder;
public:
    void add(const std::string & xP, const double xMin,        const double xMax,          const double xStep      );
    void add(const std::string & xP, const unsigned int xMin,  const unsigned int xMax,    const unsigned int xStep);
    void add(const std::string & xP, const int xMin,           const int xMax,             const int xStep         );

private:
    std::vector<QBound<double>>       xParametersDouble;
    std::vector<QBound<unsigned int>> xParametersUint;
    std::vector<QBound<int>>          xParametersInt;
};

class QMultiBounds
{
    friend class QBoundsHolder;                          
public:
    void add (const std::string & xI, const std::string & xP, const double xMin,        const double xMax,          const double xStep      );
    void add (const std::string & xI, const std::string & xP, const unsigned int xMin,  const unsigned int xMax,    const unsigned int xStep);
    void add (const std::string & xI, const std::string & xP, const int xMin,           const int xMax,             const int xStep         );

private:
    std::vector< std::pair< std::string, QBounds >> xData;
};

class  QBoundsHolder
{
public:
   template <class QType>   void  add ( const std::string & xP,    const QType xMin, const QType xMax, const QType xStep);

private:
    QMultiBounds   xParams;      
};

template <class QType> inline  void QBoundsHolder::add    ( const std::string & xP,    const QType xMin, const QType xMax, const QType xStep)
{
    this->xParams[0].second.add( xP, xMin, xMax, xStep );        
};

错误位于最后一行(即this->xParams[0]...)。

非常感谢任何帮助, 丹尼尔

P.S。指向再现问题的最小可编译解决方案的链接是here

1 个答案:

答案 0 :(得分:1)

QMultiParameterBounds::operator[]返回const std::pair<std::string, QParameterBounds>,但QParameterBounds::addParameter不是const

您可能需要添加{const QMultiParameterBounds::operator[]的非常量版本。