编译以下代码时,我一直收到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
答案 0 :(得分:1)
QMultiParameterBounds::operator[]
返回const std::pair<std::string, QParameterBounds>
,但QParameterBounds::addParameter
不是const
。
您可能需要添加{const QMultiParameterBounds::operator[]
的非常量版本。