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

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

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

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

structure

このタグは、プログラム言語におけるデータ型structure(構造体)に関するタグです。

C++

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

Q&A

2回答

2290閲覧

【C++】構造体の変数をpublicからprivateに変えたい

howto_o

総合スコア8

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

structure

このタグは、プログラム言語におけるデータ型structure(構造体)に関するタグです。

C++

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

0グッド

0クリップ

投稿2020/04/23 12:05

前提・実現したいこと

● 前提
自販機を制御するコードを作成しています。
商品の在庫数を構造体で保存しています。

商品はwater, greentea, coffee で
初期値はすべて'0'です。

● 実現したいこと
商品在庫を保存する構造体の変数を
publicではなく、privateにしたいです。
(※ 他クラスからの変更を制限するためです。)

該当のソースコード

現状は、構造体[ProductStock]を
publicにしている状態でビルドは通っていますが
privateに変える書き方が分かりません。

C++

1class CalcVendingMachine { 2 public: 3 struct ProductStock 4 { 5 u32_t water; 6 u32_t greentea; 7 u32_t coffee; 8 }; 9 struct ProductStock list_stock = {0, 0, 0}; 10 private: 11 // privateにする書き方が分からない. 12};

試したこと

● 構造体をそのままprivate:に入れる

C++

1class CalcVendingMachine { 2 public: 3 private: 4 struct ProductStock 5 { 6 u32_t water; 7 u32_t greentea; 8 u32_t coffee; 9 }; 10 struct ProductStock list_stock = {0, 0, 0}; 11};

試した結果発生している問題・エラーメッセージ

C++

1エラーメッセージ 2error:struct VendingMachine::CalcVendingMachine::ProductStock’ is private

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

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

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

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

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

guest

回答2

0

構造体の定義と、構造体の変数の宣言の関係がわかってないかな...

C++

1#include <cstdio> 2#include <cstdint> 3 4class CalcVendingMachine { 5 public: 6 struct ProductStock { //この構造体の定義を公開したいならpublic 7 uint32_t water; 8 uint32_t greentea; 9 uint32_t coffee; 10 }; 11 void setWater(uint32_t w) { 12 list_stock.water = w; 13 } 14 15 private: 16 ProductStock list_stock = {0, 0, 0}; // C++ではCと違って「タグ名」だけで型名として成立 17}; 18 19int main() { 20 CalcVendingMachine machine; 21 CalcVendingMachine::ProductStock stock; //ProductStock構造体はpublic 22 stock.water = 0; //OK 23// machine.list_stock.water = 0; //list_stock変数はprivateなのでエラー 24 machine.setWater(0); //メンバ関数の中でprivateメンバーが使われるのはもちろんOK 25} 26

がご所望の状況になりますでしょうか。

投稿2020/04/23 23:06

thkana

総合スコア7703

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

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

howto_o

2020/04/24 12:45 編集

thkana様 ご回答いただきありがとうございます。 すみませんが、もう少し教えていただきたいのですが 提示いただいたコード中の、下記の箇所について ProductStock構造体自体 を privateにして非公開にすることは可能なのでしょうか。 もしくは、list_stock変数をprivateにできていれば、そこまでする必要はないのでしょうか。 struct ProductStock { //この構造体の定義を公開したいならpublic uint32_t water; uint32_t greentea; uint32_t coffee; };
thkana

2020/04/24 12:53

あなたが自分のやりたいことを見せてないのでなんとも言えませんが、 error: ‘struct VendingMachine::CalcVendingMachine::ProductStock’ is private というエラーが出るようなことをしたいのなら、つまりそれはProductStock構造体をクラスの外で使いたいのでしょう? だったらpublicにしないと仕方ないのでは? > そこまでする必要はないのでしょうか。 あなたがどこまでしたいのか、説明して下さい。 少なくとも、 class C{ private: int num; } としたとき、intがアクセス可能じゃないか? と心配する人は多分いないでしょう。intは型なのですから。 同じように、ProductStockをprivateにするかしないかで悩む必要はほとんどないと思うのですけれど?
guest

0

ProductStockの宣言は別にprivateにする必要がないのでは

投稿2020/04/23 12:29

yumetodo

総合スコア5852

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問