質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

4回答

1747閲覧

C++ 配列のアドレスを渡したい

tsukagon

総合スコア30

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/08/07 04:13

こんにちは。C++ 初学者です。
main関数内で(x,y,z,bx,by,bz)の6つの要素を持つ構造体を配列要素として2×2の二次元配列を作りました。このアドレスをkakunou関数に渡して各値を変更するプログラムを作成したいのですが下記のエラーが出てしまいます。
根本的に理解できない部分があるかと思いますが教えていただけると助かります。

error: ‘__gnu_cxx::__alloc_traits<std::allocator<std::vector<pb> > >::value_type {aka class std::vector<pb>}’ has no member named ‘x’ alldata[0][0].x=1;
#include<iostream> #include<stdio.h> #include<math.h> #include <vector> using namespace std; void kakunou(vector<vector<struct pb>> *alldata){ alldata[0][0].x=1; alldata[0][0].y=1; alldata[0][0].z=1; alldata[0][0].bx=1; alldata[0][0].by=1; alldata[0][0].bz=1; } int main(){ struct pb{ double x,y,z,bx,by,bz; }; vector<vector<struct pb>>alldata(2,vector<struct pb>(2)); kakunou(alldata); cout<<alldata[0][0].x<<endl; return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

struct pb{ ouble x,y,z,bx,by,bz; }; を main の中に置かず、
void kakunou(vector<vector<struct pb>> &alldata){ の前に置いてください。

*alldata ではなく、&alldata であることも忘れないでください。

追記
参照ではなく、アドレスを渡したいのなら、次のように書かないといけなくなります。

C++

1#include <iostream> 2#include <vector> 3using namespace std; 4 5struct pb { 6 double x, y, z, bx, by, bz; 7}; 8 9void kakunou(vector<vector<struct pb>> *alldata) 10{ 11 (*alldata)[0][0].x = 1; 12 (*alldata)[0][0].y = 1; 13 (*alldata)[0][0].z = 1; 14 (*alldata)[0][0].bx = 1; 15 (*alldata)[0][0].by = 1; 16 (*alldata)[0][0].bz = 1; 17} 18 19int main() 20{ 21 vector<vector<struct pb>>alldata(2,vector<struct pb>(2)); 22 23 kakunou(&alldata); // ★ アドレスを渡す 24 cout << alldata[0][0].x << endl; 25 return 0; 26}

投稿2021/08/07 04:25

編集2021/08/07 04:34
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsukagon

2021/08/07 06:33

ご回答ありがとうございます。 ポインタ渡しと参照渡しについての理解が足りておりませんでした。 少し調べてみたところそれぞれに特性があり今回は参照渡しを使うべきことが分かりましたので解決とさせていただきます。
guest

0

kakunouはなぜvectorへのポインタを取るのでしょうか?

ポインタ引数とした場合、渡す側でもポインタを作る必要がありますし、受け取った側でも逆参照でポインタを解決する必要が出てきます。

投稿2021/08/07 04:16

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/08/07 04:17

参照として渡せば、ポインタの扱いを考える必要はなくなります。
tsukagon

2021/08/07 06:28

ご回答ありがとうございます。ポインタ渡しと参照渡しの違いについて理解できておりませんでしたので勉強して参ります。
guest

0

このアドレスをkakunou関数に渡して各値を変更するプログラムを作成したい

C++

1#include <iostream> 2#include <vector> 3 4struct pb { double x, y, z, bx, by, bz; }; 5 6void kakunou(std::vector<std::vector<struct pb>>* alldata) { 7 (*alldata)[0][0].x = 1; 8 (*alldata)[0][0].y = 1; 9 (*alldata)[0][0].z = 1; 10 (*alldata)[0][0].bx = 1; 11 (*alldata)[0][0].by = 1; 12 (*alldata)[0][0].bz = 1; 13} 14 15int main() { 16 using namespace std; 17 18 vector<vector<struct pb>> alldata(2, vector<struct pb>(2)); 19 20 kakunou(&alldata); 21 cout << alldata[0][0].x << endl; 22 return 0; 23}

投稿2021/08/07 05:40

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

cpp

1void kakunou(vector<vector<struct pb>>& alldata)

に変えてください。

投稿2021/08/07 04:16

yumetodo

総合スコア5852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問