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

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

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

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

C++

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

Q&A

解決済

4回答

5044閲覧

クラスの静的変数でエラー

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

C++

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

0グッド

0クリップ

投稿2018/03/09 20:17

基本クラスとそのクラスの派生クラスのオブジェクトのメンバー変数を共有したいのですがstaticで宣言したらエラーが起こりました

ほかの変数などは省きます

class Acls { protected: static int data[10][10]; public: void DataDisp(); }; class Bcls : public Acls { public: //dataをいじる関数 }; int main() { Acls a; Bcls b; b.dataをいじる関数; a.DataDisp(); }

LNK200:外部シンボル""protected static int(*Acls::data)[10]"(?...)"は未解決です
LNK112(1件の未解決外部参照
というエラーが出ます
どうしたらいいですか?

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

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

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

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

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

guest

回答4

0

ベストアンサー

第28章 静かなるメンバ

このエラーは「実体がないよ」というエラーです。つまり、メンバ変数に static をつけると別に実体を作る必要があるということです。

 それはこのようにします。

C++

1class CNum 2{ 3private: 4 static int m_num; 5 6public: 7 CNum(int num){ m_num = num; } 8 void Disp() { cout << m_num << endl; } 9}; 10 11int CNum::m_num;

とあるように、静的メンバーはクラス宣言しただけではいけません。

投稿2018/03/10 00:33

Zuishin

総合スコア28656

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

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

Zuishin

2018/03/10 00:36

「public でないから~」という回答が多いようですが、おそらくは main() からアクセスしているのは 「dataをいじる関数」というパブリックメソッドで、その内側から data にアクセスしているんだと思います。
退会済みユーザー

退会済みユーザー

2018/03/10 05:15

ありがとうございます 解決しました int Cnum::m_num;ここがなかったので動かなかったぽいです これを追加してコンストラクタ作ったらいけました 補足 ※zuishinさんの言う通りmainからアクセスしてるのはpublic関数で変数自体はアクセスしてません
guest

0

protectedメソッド、フィールドはクラス内部または継承したクラス内部からしか利用できません。

publicフィールドに変更するとか、publicメソッドを経由するとかが必要です。

投稿2018/03/09 23:48

HogeAnimalLover

総合スコア4830

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

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

0

オブジェクト指向プログラミングに真っ向から歯向かっていますね・・・
ゲッタ・セッタを適切に用意するのが真っ当な方法でしょうかね。

投稿2018/03/09 23:04

kazto

総合スコア7196

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

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

0

protected の項目はmainからはアクセスできません。
まさにエラーメッセージそのとおりですが、これをどうしたいんでしょうか?

投稿2018/03/09 22:05

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問