当它不是时,C++ 将其视为 const
C++ treating this as a const when it isn't
我正在尝试使用 Visual Studio 2010 编译一些 C++ 代码,但出现以下错误:
error C2664: 'molder::Mold::set_piece_maker' : cannot convert parameter 1 from 'piece_maker::Piece_Maker *const ' to '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 但没有标记我对其 mold 属性的修改,也没有标记我传递的 "this" 作为 origin 参数。
- 当我实际使 set_mold() 成为常量时,编译器会引发错误,因为它试图修改该函数中的模具并试图将 "this" 作为原点传递。
编译器引发该错误可能发生了什么?
问题不在于 const
,它是顶级 const
,无论如何都会被忽略。看看垂直排列的两种类型:
piece_maker::Piece_Maker *const
piecemaker::Piece_Maker *
我正在尝试使用 Visual Studio 2010 编译一些 C++ 代码,但出现以下错误:
error C2664: 'molder::Mold::set_piece_maker' : cannot convert parameter 1 from 'piece_maker::Piece_Maker *const ' to '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 但没有标记我对其 mold 属性的修改,也没有标记我传递的 "this" 作为 origin 参数。
- 当我实际使 set_mold() 成为常量时,编译器会引发错误,因为它试图修改该函数中的模具并试图将 "this" 作为原点传递。
编译器引发该错误可能发生了什么?
问题不在于 const
,它是顶级 const
,无论如何都会被忽略。看看垂直排列的两种类型:
piece_maker::Piece_Maker *const
piecemaker::Piece_Maker *