当C ++不是时,将其视为const

时间:2015-01-05 01:03:03

标签: c++ visual-c++ const this

我正在尝试使用Visual Studio 2010编译一些C ++代码,但是收到以下错误:

  

错误C2664:'molder :: Mold :: set_piece_maker':无法将参数1从'piece_maker :: Piece_Maker * const'转换为'piecemaker :: Piece_Maker *'

该错误指的是管理两个类之间相互引用的两个镜像函数:

void Piece_Maker::set_mold(molder::Mold* value, void* origin) {
    if (this->mold == value)
        return;

    this->mold = value;
    this->mold->set_piece_maker(this, this); // This is the line with the error
}

void Mold::set_piece_maker(piecemaker::Piece_Maker* value, void* origin) {
    if (this->piece_maker == value)
        return;

    this->piece_maker = value;
    this->piece_maker->set_mold(this, this);
}
  • 我在任何地方都没有使用const。
  • 错误只发生在mold-> set_piece_maker()行,而镜像的piece_maker-> set_mold()行编译得很好。
  • 编译器声称“this”是const但是没有标记我对其模具属性的修改,并且没有标记我传递“this”作为origin参数。
  • 当我实际制作set_mold()const时,编译器会因尝试修改该函数中的模具并尝试将“this”作为原点而引发错误。

编译器可能会发生什么情况来引发错误?

1 个答案:

答案 0 :(得分:7)

问题不在于const,它是顶级const,无论如何都会被忽略。看看垂直排列的两种类型:

piece_maker::Piece_Maker *const
piecemaker::Piece_Maker *