"C2248: '<クラス名>::<メンバ名>': private メンバー (クラス '<クラス名>' で宣言されている) にアクセスできません" に関する原因と対処

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

スポンサード リンク

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

コンパイルエラーメッセージ:
error C2248: '<クラス名>::<メンバ名>': private メンバー (クラス '<クラス名>' で宣言されている) にアクセスできません。<ソースファイル名>: '<クラス名>::<メンバ名>' の宣言を確認してください

ソース(バグ有り):

#include <iostream>
#include <string>
using namespace std;
class CVehicle{
public:
virtual void move()
{
cout << "a Vehicle runs." << endl;
}
private: int run=0; }; class CCar : public CVehicle {
public:
void move()
{
cout << "a car runs." << endl;
run=1;
} }; int main() {
CCar mycar;
mycar.move();
return 0; }


原因:
private で宣言されているクラスに対して外部(派生クラスなど)がアクセスしようとしました。

private メンバには外部からアクセスできません。

対処:
private 宣言が妥当か確認します。外部からアクセスしたい場合はprivate を public あるいはprotected などに変更します。


ソース(修正済み):

#include <iostream>
#include <string>
using namespace std;
class CVehicle{
public:
virtual void move()
{
cout << "a Vehicle runs." << endl;
}
public: int run=0; }; class CCar : public CVehicle {
public:
void move()
{
cout << "a car runs." << endl;
run=1;
} }; int main() {
CCar mycar;
mycar.move();
return 0; }

スポンサード リンク



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