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

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

C# と VB.NET の入門サイト

クラス変数へのポインタアクセス

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■95637 / inTopicNo.1)  クラス変数へのポインタアクセス
  
□投稿者/ marusa (15回)-(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; //エラー行。 "式にはクラス型が必要です。"
}
```

よろしくお願いいたします。
引用返信 編集キー/
■95638 / inTopicNo.2)  Re[1]: クラス変数へのポインタアクセス
□投稿者/ Hongliang (1084回)-(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
とアロー演算子を使わないといけませんね。
引用返信 編集キー/
■95639 / inTopicNo.3)  Re[1]: クラス変数へのポインタアクセス
□投稿者/ furu (67回)-(2020/08/28(Fri) 14:32:55)
No95637 (marusa さん) に返信
> *image.cols = 1; //エラー行。 "式にはクラス型が必要です。"
優先順位の問題?
(*image).cols = 1;
引用返信 編集キー/
■95640 / inTopicNo.4)  Re[2]: クラス変数へのポインタアクセス
□投稿者/ marusa (17回)-(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
> とアロー演算子を使わないといけませんね。

なるほど、そうだったのですね。
ありがとうございます。
解決済み
引用返信 編集キー/
■95641 / inTopicNo.5)  Re[2]: クラス変数へのポインタアクセス
□投稿者/ marusa (18回)-(2020/08/28(Fri) 14:39:28)
No95639 (furu さん) に返信
> ■No95637 (marusa さん) に返信
>> *image.cols = 1; //エラー行。 "式にはクラス型が必要です。"
> 優先順位の問題?
> (*image).cols = 1;

こちらでも可能でした。ありがとうございます。
.演算子と*の優先順位をプログラムが認識してくれるのがアロー演算子で、
手動で優先順位を付けるかアロー演算子を使う必要があると理解しました。
解決済み
引用返信 編集キー/
■95642 / inTopicNo.6)  Re[2]: クラス変数へのポインタアクセス
□投稿者/ 774RR (824回)-(2020/08/28(Fri) 14:39:34)
もっとコメントするなら C++ では . の結合のほうが単項 * より強いので、
*image.cols は *(image.cols) と解釈されるので . の左側はクラス型でないエラー
image->cols と書くか (*image).cols ならたぶん質問者の意図通りっス

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

そうですね。C++(Cも?)ならではの所で戸惑いました。
回答ありがとうございます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ