[過去ログ] 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
931: デフォルトの名無しさん [] 2018/06/24(日) 10:44:32 ID:8StK2ZXu(1/19) AAS
class clsAにconst member 変数を登録したいのだけどうまくいかない。
クラスコンストラクタでconst char *mes[] を{"abc","def"}のように
初期化するにはどうやるの?
932
(1): デフォルトの名無しさん [] 2018/06/24(日) 10:57:11 ID:8StK2ZXu(2/19) AAS
//そもそもC++は文字列の配列を扱うことができるのか?

constexpr auto str1 = {"abc", "def"};
これがエラーするんだがなんでなの?
933
(1): デフォルトの名無しさん [] 2018/06/24(日) 11:00:18 ID:8StK2ZXu(3/19) AAS
constexpr string[] str1 = {"abc", "def"}; コンパイルエラー
constexpr string str1[] = {"abc", "def"}; コンパイルエラー
クッ、、、どうしてもうごかない。
934
(2): デフォルトの名無しさん [] 2018/06/24(日) 11:15:54 ID:8StK2ZXu(4/19) AAS
string str1 = "abc"; //OK
vector<int> dat(100,3); //ok

vector<string> str2("aaa",4); //error
こういうのもうごかない。
935: デフォルトの名無しさん [] 2018/06/24(日) 11:23:27 ID:8StK2ZXu(5/19) AAS
自分としてはストリングを多用するのでストリング配列が使えないと厳しい。
検索をしても例がなかなか出てこないので、Effectiv Modern C++という本
をamazonで買ってみたんだが、届いたので今見ているところだが、ここでも
string配列の記述を巧みに避けている。皆目出てこない。

string配列の扱い方ってどうやるの?
940: デフォルトの名無しさん [] 2018/06/24(日) 13:13:44 ID:8StK2ZXu(6/19) AAS
string str1 = "abc"; //OK
vector<int> dat(100,3); //ok
//vector<string> str2("aaa",4); //error

// string str1[] = {"abc", "def"}; //error
// const std::vector<std::string> str3 = {"abc", "def"}; //error
// constexpr char *mes1 = "abc"; //error
const char *mes1 = "abc"; //ok
// vector<char *> ch(10,mes1);//error
vector<string> ch(10,str1);//ok

ここまで確認できた。ただしコンパイルが通っただけだから、動くかどうかは不明。
941
(1): デフォルトの名無しさん [] 2018/06/24(日) 13:37:02 ID:8StK2ZXu(7/19) AAS
//C++はchar *[]のコンストラクタでの初期化はできるのか?
class clsA
{
private:
const char *m_name[];
}
//clsA::clsA(char *name[]) : m_name(["mike","tetu"]){};//だめ
//clsA::clsA(char *name[]) : m_name("mike","tetu"){};//これもだめ
//clsA::clsA(char *name[]) : m_name({"mike","tetu"}){};//これもだめ
943: デフォルトの名無しさん [] 2018/06/24(日) 13:41:38 ID:8StK2ZXu(8/19) AAS
>内部的にヒープを使うようなクラスはほとんど constexpr 非対応だと思う。

constexpr char *mes1 = "abc"; //error
これもだめですね。ヒープは必要ないとおもいますが、、、
944: デフォルトの名無しさん [] 2018/06/24(日) 13:42:37 ID:8StK2ZXu(9/19) AAS
>>サイズ不明だし無理だろ

コンストラクトする時点でサイズは確定していますが、、、
946: デフォルトの名無しさん [] 2018/06/24(日) 14:12:06 ID:8StK2ZXu(10/19) AAS
//C++はchar *[]のコンストラクタでの初期化はできるのか?
class clsA
{
private:
const char *m_name[];
clsA(char *name[]);
};

//clsA::clsA(char *name[]) : m_name(["Bike","tetu"]){};

/*だめだが可能性がありそう。 Invalidはでていない。
--error message--
#29 expected an expression
*/

//clsA::clsA(char *name[]) : m_name("mike","tetu"){};//これもだめ invalid
/*
Multiple markers at this line
- #2125 invalid initializer for array member
"clsA::m_name"
- #18 expected a ")"
*/

//clsA::clsA(char *name[]) : m_name({"mike","tetu"}){};//これもだめ
/*
* Multiple markers at this line
以下省略
*/
950: デフォルトの名無しさん [] 2018/06/24(日) 14:58:47 ID:8StK2ZXu(11/19) AAS
>>947
947(1): デフォルトの名無しさん [sage] 2018/06/24(日) 14:20:47 ID:p8F2e5jx(3/4) AAS
すまん、そっちはエラーメッセージじゃ分からん。
string str1[] = {"abc", "def"}; //error
とか
constexpr char *mes1 = "abc"; //error
とかの話。
string str2[] = {"abc", "def"}; //okでした。

constexpr 文字列は諦めました。多分相当難しい。
でおもうのだが、結局は普通の人は誰もconst char *配列の初期化について解らない。
というか、ファーム開発にC++を使う場合には文字列の配列はかなり重要でしかも
Ramが少ないのでこれをRom配置できないと致命的だ。ということでファーム開発
ではconst char *mes[] = {"zzz","aaa"}; こういう処理が必要になる。
しかしファーム開発をやらない人にとってはconstである理由はないので、この重要さ
には無関心なのだろう。

もちろん分かる人もいるが教えるのは恐ろしくめんどくさいか、非常に苦労して
マスターしたので簡単には教えたくない。
それほどC++において const char *配列 のクラスでの初期化は難しいのだろうと思う。

いやそもそもできないのかもしれないが、、、(そんなはずはないだろう)。しかし
できないとすると、クラス内で初期化するのは諦めてCで初期化してるのだろうか?
多くのファーム開発者は諦めてCで初期化してるのだろうな。
953: デフォルトの名無しさん [] 2018/06/24(日) 16:11:30 ID:8StK2ZXu(12/19) AAS
class clsA
{
private:
const char *m_name;
clsA();
};
clsA::clsA() : m_name("Bike"){};

これはOK、しかし配列はできない。
956: デフォルトの名無しさん [] 2018/06/24(日) 17:24:18 ID:8StK2ZXu(13/19) AAS
//C++はchar *[]のコンストラクタでの初期化はできるのか?
class clsA
{
private:
const char *m_name[2];
clsA():m_name{"aaa","bbbb"}{}
};
これでもエラーします。
958: デフォルトの名無しさん [] 2018/06/24(日) 17:54:03 ID:8StK2ZXu(14/19) AAS
//C++はchar *[]のコンストラクタでの初期化はできるのか?
class clsA
{
private:
char *m_name[10];
clsA();
void init();
};
clsA::clsA() : m_name{"Bike","bbb"}{}; //エラーする。
/*
Multiple markers at this line
- #66 expected a ";"
- #171 expected a
declaration
- #126 expected a "("
- #176-D expression has
no effect
*/
959: デフォルトの名無しさん [] 2018/06/24(日) 18:01:33 ID:8StK2ZXu(15/19) AAS
それconst つけるの忘れてたが、つけた場合もエラー表示は同じだね。
961
(1): デフォルトの名無しさん [] 2018/06/24(日) 18:18:27 ID:8StK2ZXu(16/19) AAS
>>960
960(1): デフォルトの名無しさん [sage] 2018/06/24(日) 18:04:27 ID:p8F2e5jx(4/4) AAS
あなたの使っているコンパイラは、おそらくC++11未対応です。
constexprはC++11の機能なので、そのコンバイラでは使えないか、
使えたとしても標準とは異なる動作をする可能性があります。
あっ、そうなの? ごめん、それはうっかりしていた。今年の2月にインストール
した最近のコンパイラなので当然C++11以上だとおもっていた。
一寸調べてみる。
963: デフォルトの名無しさん [] 2018/06/24(日) 18:36:49 ID:8StK2ZXu(17/19) AAS
>>962
962(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2018/06/24(日) 18:23:43 ID:StWe8jKY(2/2) AAS
>>961
対応していてもデフォルトでは C++11 の挙動にならない (オプション指定すると対応する) ようなものも有りうる。
おお、ありがとう。全然気が付かなかった。これは一つ前のバージョンでプロパティを
みてもC11++がない。
最新のバージョンはC++14をサポートしてるみたいなのでUPDATEしてみる。
965: デフォルトの名無しさん [] 2018/06/24(日) 22:24:29 ID:8StK2ZXu(18/19) AAS
>>964
964(2): デフォルトの名無しさん [sage] 2018/06/24(日) 19:43:42 ID:G0tizpK6(1) AAS
勘違いしてたらすまないけど↓みたいな事がしたいの?
外部リンク:ideone.com
凄い!!。まさにそれです。こちらでもコンパイル通りました。
難しいなー。
もうコンストラクタでの初期化はすっかり諦めて代替案を作っていたところだけ
ど、それを丁重に拝借いたします。ありがとう。
967: デフォルトの名無しさん [] 2018/06/24(日) 23:08:30 ID:8StK2ZXu(19/19) AAS
>>966
966(1): デフォルトの名無しさん [sage] 2018/06/24(日) 22:30:41 ID:EmcxYm71(1) AAS
借りるってことは返すんだよね
もらい受けたいところだけども、意味が理解できるかどうか? あなたは意味が
わかりますか?
clsA() : clsA((const char* const []){"mike","tetu",nullptr}) {};

(const char* const []){"mike","tetu",nullptr}
これは何を意味してるの?
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.037s