"C3490: '<変数名>' は const オブジェクトを通じてアクセスされているため変更できません" に関する原因と対処

このコンパイルエラーの原因と対処に関して説明します。

スポンサード リンク

Microsoft Visual C++にて以下のソースでコンパイルエラーが発生します:

コンパイルエラーメッセージ:
error C3490: '<変数名>' は const オブジェクトを通じてアクセスされているため変更できません

ソース(バグ有り):

#include <iostream>
#include <string>
using namespace std;
class CMyclass {
public:
int add() const;
int m=0; }; int CMyclass::add() const {
m++;
{ cout << "m=" << m << endl; }
return m; } int main() {
CMyclass myclassr;
myclassr.add();
return 0; }


原因:
const 修飾子により定義された関数がメンバ変数の値を変更しようとしました。この場合、メンバ変数の値は変更できません。

対処:
メンバ変数の値を変更する関数なので、const 修飾子を外します。


ソース(修正済み):

#include <iostream>
#include <string>
using namespace std;
class CMyclass {
public:
int add();
int m=0; }; int CMyclass::add() {
m++;
{ cout << "m=" << m << endl; }
return m; } int main() {
CMyclass myclassr;
myclassr.add();
return 0; }

スポンサード リンク



[コンパイルエラーコード、メッセージに戻る]