"C2228: '.x' の左側はクラス、構造体、共用体でなければなりません" に関する原因と対処

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

スポンサード リンク

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

コンパイルエラーメッセージ:
error C2228: '.x' の左側はクラス、構造体、共用体でなければなりません 型は 'point *' です。 代わりに '->' を使用しますか?

ソース(バグ有り):

#include<iostream>
using namespace std;

struct point
{
int x;
int y; }; int main() {
struct point a={10,20};
struct point *p;
p=&a; p.x=30;
cout << "p = (" << p->x << "," << p->y << ")" << endl;
return 0; }


原因:
構造体のメンバへの値の代入方式に誤りがあります。

対処:
構造体へのポインタを使用して代入する場合は、ドットではなく -> を使用します。


ソース(修正済み):

#include<iostream>
using namespace std;

struct point
{
int x;
int y; }; int main() {
struct point a={10,20};
struct point *p;
p=&a;
p->x=30;
cout << "p = (" << p->x << "," << p->y << ")" << endl;
return 0; }

スポンサード リンク



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