"C2819: クラス '<構造体名> にはオーバーロードされたメンバー 'operator ->' がありません。" に関する原因と対処

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

スポンサード リンク

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

コンパイルエラーメッセージ:
error C2819: クラス 'point' にはオーバーロードされたメンバー 'operator ->' がありません。 '<構造体名>' の宣言を確認してください。 代わりに '.' を使用しますか?

ソース(バグ有り):

#include<iostream>
using namespace std;

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


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

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


ソース(修正済み):

#include<iostream>
using namespace std;

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

スポンサード リンク



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