C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.95637 の関連記事表示

<< 0 >>
■95637  クラス変数へのポインタアクセス
□投稿者/ marusa -(2020/08/28(Fri) 14:23:30)

    分類:[C/C++] 

    2020/08/28(Fri) 14:24:20 編集(投稿者)

    お世話になっております。
    C++ VS2015で開発をしております。

    OPENCVを利用していた際、以下のようなコードでエラーが出る原因が分からないのですが、
    クラス変数は通常のポインタでのアクセスのようなことは出来ないのでしょうか。

    ```
    #include "opencv2\opencv.hpp"

    int main(){
    cv::Mat image;
    int data;
    void sample_method(&image, &data)
    }

    void sample_method(cv::Mat *image, int *data){
    *data = 1; //これはOK
    *image.cols = 1; //エラー行。 "式にはクラス型が必要です。"
    }
    ```

    よろしくお願いいたします。
親記事 /過去ログ165より / 関連記事表示
削除チェック/

■95639  Re[1]: クラス変数へのポインタアクセス
□投稿者/ furu -(2020/08/28(Fri) 14:32:55)
    No95637 (marusa さん) に返信
    > *image.cols = 1; //エラー行。 "式にはクラス型が必要です。"
    優先順位の問題?
    (*image).cols = 1;
記事No.95637 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95641  Re[2]: クラス変数へのポインタアクセス
□投稿者/ marusa -(2020/08/28(Fri) 14:39:28)
    No95639 (furu さん) に返信
    > ■No95637 (marusa さん) に返信
    >> *image.cols = 1; //エラー行。 "式にはクラス型が必要です。"
    > 優先順位の問題?
    > (*image).cols = 1;

    こちらでも可能でした。ありがとうございます。
    .演算子と*の優先順位をプログラムが認識してくれるのがアロー演算子で、
    手動で優先順位を付けるかアロー演算子を使う必要があると理解しました。
記事No.95637 のレス / END /過去ログ165より / 関連記事表示
削除チェック/

■95638  Re[1]: クラス変数へのポインタアクセス
□投稿者/ Hongliang -(2020/08/28(Fri) 14:31:02)
    > void sample_method(cv::Mat *image, int *data){
    > *data = 1; //これはOK
    > *image.cols = 1; //エラー行。 "式にはクラス型が必要です。"
    > }

    imageはcv::Mat型のポインタ。
    ポインタが指すインスタンスのメンバへのアクセスは
    image->cols
    とアロー演算子を使わないといけませんね。
記事No.95637 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95642  Re[2]: クラス変数へのポインタアクセス
□投稿者/ 774RR -(2020/08/28(Fri) 14:39:34)
    もっとコメントするなら C++ では . の結合のほうが単項 * より強いので、
    *image.cols は *(image.cols) と解釈されるので . の左側はクラス型でないエラー
    image->cols と書くか (*image).cols ならたぶん質問者の意図通りっス
記事No.95637 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95643  Re[3]: クラス変数へのポインタアクセス
□投稿者/ marusa -(2020/08/28(Fri) 14:43:42)
    No95642 (774RR さん) に返信
    > もっとコメントするなら C++ では . の結合のほうが単項 * より強いので、
    > *image.cols は *(image.cols) と解釈されるので . の左側はクラス型でないエラー
    > image->cols と書くか (*image).cols ならたぶん質問者の意図通りっス
    >

    そうですね。C++(Cも?)ならではの所で戸惑いました。
    回答ありがとうございます。
記事No.95637 のレス / END /過去ログ165より / 関連記事表示
削除チェック/

■95640  Re[2]: クラス変数へのポインタアクセス
□投稿者/ marusa -(2020/08/28(Fri) 14:37:42)
    No95638 (Hongliang さん) に返信
    >>void sample_method(cv::Mat *image, int *data){
    >> *data = 1; //これはOK
    >> *image.cols = 1; //エラー行。 "式にはクラス型が必要です。"
    >>}
    >
    > imageはcv::Mat型のポインタ。
    > ポインタが指すインスタンスのメンバへのアクセスは
    > image->cols
    > とアロー演算子を使わないといけませんね。

    なるほど、そうだったのですね。
    ありがとうございます。
記事No.95637 のレス / END /過去ログ165より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -