ホームページ >バックエンド開発 >C++ >C++ エラー: 非ポインター クラス メンバーへのアロー操作の呼び出しは許可されていません。解決方法は?

C++ エラー: 非ポインター クラス メンバーへのアロー操作の呼び出しは許可されていません。解決方法は?

WBOY
WBOYオリジナル
2023-08-21 21:41:051227ブラウズ

C はオブジェクト指向プログラミング言語です。その威力は、オブジェクト指向プログラミング パラダイムにより、開発者がカプセル化、継承、ポリモーフィズムなどの関数を実行し、コードの可読性と保守性を向上できることにあります。しかし、日々の開発ではさまざまなエラーや例外に遭遇することは避けられず、これらの問題に対処するのがプログラマーの日々の仕事です。その中で、「ポインタクラス以外のメンバーへのアロー操作の呼び出しが許可されていない」という問題はどうやって解決するのでしょうか?

まず、このエラーの意味を理解しましょう。C では、構造体またはクラス ポインター内のメンバー関数またはメンバー変数にアクセスするために、矢印演算子 (->) が使用されます。場合によっては、アロー演算子を使用して非ポインター型のメンバーにアクセスすると、このエラーが発生します。たとえば、次のコードはこのエラーを引き起こす可能性があります。

class person{
public:
    void print(){
        cout<<"name:"<<name<<endl;
        cout<<"age:"<<age<<endl;
    }
private:
    string name;
    int age;
};
int main(){
    person p;
    p->print();
    return 0;
}

上記のコードでは、オブジェクトのメンバーを印刷するための print 関数を持つ person という名前のクラスを定義します。 main 関数 person オブジェクト p in をインスタンス化し、アロー演算子を使用して print 関数にアクセスします。ただし、コンパイルして実行しようとすると、「非ポインター クラス メンバーに対するアロー操作の呼び出しは許可されていません」というエラー メッセージが表示されます。

次に、この問題の解決策を見つける必要があります。このエラーの最も一般的な原因は、非ポインター型で矢印演算子を使用しようとしたことです。解決策は簡単です。矢印演算子 (->) をドット演算子 (.) に置き換えるだけです。

int main(){
    person p;
    p.print();
    return 0;
}

この時点で、コードを再度コンパイルして実行すると、エラーは消え、プログラムは正常に実行できるようになりました。

上記の方法に加えて、ポインターを使用するより良い方法があります。 C では、ポインターは、クラスのメンバーにアクセスするためにクラスのオブジェクトを指すことができる非常に一般的なデータ型です。ポインタを使用すると、上記の問題を回避できるだけでなく、オブジェクトをより柔軟に操作できるようになります。たとえば、上記のコードを次のように変更できます。

int main(){
    person *p = new person;
    p->print();
    delete p;
    return 0;
}

このバージョンのコードでは、person クラスを指すポインタ p を使用して print 関数にアクセスします。このようにして、オブジェクトの作成と破棄を柔軟に行うことができ、オブジェクトの有効期間の問題によって引き起こされるエラーを回避できます。

つまり、「非ポインター クラス メンバーへのアロー操作の呼び出しは許可されていません」というエラーについては、演算子を置き換えるか、ポインターを使用することで解決できます。この問題は小さいように見えるかもしれませんが、不要な問題やエラーを避けるために、コードを記述するときはより注意し、C の機能を使用するときは言語仕様に従う必要があることを思い出させます。

以上がC++ エラー: 非ポインター クラス メンバーへのアロー操作の呼び出しは許可されていません。解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。