エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1500329247/
探検
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
2017/11/04(土) 16:33:35.07ID:NYxCuvMY899デフォルトの名無しさん
2018/06/23(土) 16:51:17.93ID:7hlQnbj9 日本人は基本すっ飛ばして銀の弾丸欲しがるからな
900はちみつ餃子 ◆8X2XSCHEME
2018/06/23(土) 17:00:49.94ID:/E9OfcV+ >>898
デザインパターンってのは典型的なパターン (に名前を付けたもの) ってだけだよ。
基礎として押さえておくと便利だし、価値が失われたわけではないけど、
何もかもが既存のパターンに当てはまるわけではないという当たり前の話。
デザインパターンってのは典型的なパターン (に名前を付けたもの) ってだけだよ。
基礎として押さえておくと便利だし、価値が失われたわけではないけど、
何もかもが既存のパターンに当てはまるわけではないという当たり前の話。
901デフォルトの名無しさん
2018/06/23(土) 17:15:09.64ID:DOoRmJ6H902デフォルトの名無しさん
2018/06/23(土) 17:29:02.45ID:ul2D0Jgq >>898
別に廃れたわけではなく、使われるものは当たり前に使われてて取り立てて言われなくなっただけ。
別に廃れたわけではなく、使われるものは当たり前に使われてて取り立てて言われなくなっただけ。
>>901
たとえば、iostream をどう思う?これは良い抽象化の例ですか?
たとえば、iostream をどう思う?これは良い抽象化の例ですか?
904デフォルトの名無しさん
2018/06/23(土) 17:31:54.13ID:wjw7dXXk Visual C++6.0です。 Windows7でやってます。
ツールバーを作ると、ボタンを押すとペコってへこんで、また押すとまた戻りますが、見づらいので
押したときと戻ったときとで色を付けたいのですが、どこかにサンプルはないでしょうか
また、私は未だに6.0でやっていてこれで十分にプログラムできるので特にこれで不満はないのですが
もしバージョンを上げれば出来るのであればバージョンアップも考えたいと思っています
最新のバージョンで出来るのなら、そのサンプルも教えて頂けるとありがたいです
ツールバーを作ると、ボタンを押すとペコってへこんで、また押すとまた戻りますが、見づらいので
押したときと戻ったときとで色を付けたいのですが、どこかにサンプルはないでしょうか
また、私は未だに6.0でやっていてこれで十分にプログラムできるので特にこれで不満はないのですが
もしバージョンを上げれば出来るのであればバージョンアップも考えたいと思っています
最新のバージョンで出来るのなら、そのサンプルも教えて頂けるとありがたいです
905デフォルトの名無しさん
2018/06/23(土) 17:40:24.88ID:LiutUffZ >>904
OwnerDraw
OwnerDraw
906デフォルトの名無しさん
2018/06/23(土) 17:59:38.49ID:wjw7dXXk907デフォルトの名無しさん
2018/06/23(土) 18:04:15.08ID:LiutUffZ ナンシークラッツ本を探した方が良いかな
908デフォルトの名無しさん
2018/06/23(土) 18:14:04.63ID:wjw7dXXk ツールバーに色を付けることもできないとか。ちょっと貧弱ですよね
最新のバージョンのVC+でも出来ないのかな。結構そういう要望はあると思うけど
最新のバージョンのVC+でも出来ないのかな。結構そういう要望はあると思うけど
909デフォルトの名無しさん
2018/06/23(土) 19:24:24.28ID:8e5n022B 2分探索木を実装したC++プログラムを読んでいますが、分からないところに出くわしました。
ノードは以下のクラスです:
template <typename T> class BinNode {
private:
T data;
BinNode<T> *left, *right;
BinNode(T d, BinNode<T> *l = NULL, BinNode<T> *r = NULL);
friend class BinarySearchTree;
};
2分探索木のクラス BinarySearchTree 内のメンバ関数 insert の引数としてノードを渡すのですが、
なぜ、
BinNode<int>* tree
ではなく
BinNode<int>*& tree
となっているのかが分かりません。本の説明によると、木構造の変形を可能にするためにそうしているとのことです。
bool BinarySearchTree::insert(int data, BinNode<int>*& tree) {
…
}
ノードは以下のクラスです:
template <typename T> class BinNode {
private:
T data;
BinNode<T> *left, *right;
BinNode(T d, BinNode<T> *l = NULL, BinNode<T> *r = NULL);
friend class BinarySearchTree;
};
2分探索木のクラス BinarySearchTree 内のメンバ関数 insert の引数としてノードを渡すのですが、
なぜ、
BinNode<int>* tree
ではなく
BinNode<int>*& tree
となっているのかが分かりません。本の説明によると、木構造の変形を可能にするためにそうしているとのことです。
bool BinarySearchTree::insert(int data, BinNode<int>*& tree) {
…
}
910デフォルトの名無しさん
2018/06/23(土) 19:25:19.09ID:8e5n022B911デフォルトの名無しさん
2018/06/23(土) 19:28:47.13ID:8e5n022B insert 内に、
if (tree == NULL) {
if (tree == NULL) {
912デフォルトの名無しさん
2018/06/23(土) 19:29:33.57ID:8e5n022B insert 内に、
if (tree == NULL) {
tree = new BinNode<int>(data);
…
}
というコードがありましたが、これのことでしょうか?
if (tree == NULL) {
tree = new BinNode<int>(data);
…
}
というコードがありましたが、これのことでしょうか?
913デフォルトの名無しさん
2018/06/23(土) 19:30:15.04ID:8e5n022B914放置された蟻人間 ◆T6xkBnTXz7B0
2018/06/23(土) 19:30:26.05ID:QXtVRpnb >>909
void f(int *a) {
static int s_i = 0;
a = &s_i;
}
int main(void) {
int i = 3;
int *p = &i;
f(p);
printf("%d\n", *p);
return 0;
}
void f(int *a) {
static int s_i = 0;
a = &s_i;
}
int main(void) {
int i = 3;
int *p = &i;
f(p);
printf("%d\n", *p);
return 0;
}
915デフォルトの名無しさん
2018/06/23(土) 19:45:59.33ID:8e5n022B >>909
これは C の課題ですね。
適当な二分木ないし二分探索木に対して、ノード(節)を追加したり削除したりする関数を書く場合、
C ならば add_node(node **root, ...) と書きます。@
これを C++ ならば add_node(node *&root, ...) と書くこともあります。node *&root は「ポインタ変数の参照」です。A
@とAとではプログラムの表現もかわります。
これは一度、白紙の状態から自分の手で書くのが、理解するのに一番です。お試しあれ。
これは C の課題ですね。
適当な二分木ないし二分探索木に対して、ノード(節)を追加したり削除したりする関数を書く場合、
C ならば add_node(node **root, ...) と書きます。@
これを C++ ならば add_node(node *&root, ...) と書くこともあります。node *&root は「ポインタ変数の参照」です。A
@とAとではプログラムの表現もかわります。
これは一度、白紙の状態から自分の手で書くのが、理解するのに一番です。お試しあれ。
917デフォルトの名無しさん
2018/06/23(土) 21:09:04.41ID:nmsTY6vF 0,115200
1,38400
2,19200
3,9600
こういう関係がある時に配列を作れば1から38400はダイレクトに求められるが
検索を使わずに38400からダイレクトに1を求める方法はないだろうか?
1,38400
2,19200
3,9600
こういう関係がある時に配列を作れば1から38400はダイレクトに求められるが
検索を使わずに38400からダイレクトに1を求める方法はないだろうか?
918デフォルトの名無しさん
2018/06/23(土) 21:22:36.64ID:b0QIE6qX 115200個の配列
919デフォルトの名無しさん
2018/06/23(土) 21:26:12.81ID:EyvIrgyz A/9600 を添え字にして13個の配列で逆引き作る?
920デフォルトの名無しさん
2018/06/23(土) 21:29:09.89ID:b0QIE6qX 9600の倍数であることがわかってるなら割ればテーブルは減る
でも4個なら素直に検索した方が速い
でも4個なら素直に検索した方が速い
921デフォルトの名無しさん
2018/06/23(土) 21:41:29.91ID:EyvIrgyz 検索については同意
元質問は検索使うなって条件なので、まぁ
数値からRS232Cのボーレート設定を想定しちゃうけど、
それなら検索を嫌うようなもんでもないし… な…
元質問は検索使うなって条件なので、まぁ
数値からRS232Cのボーレート設定を想定しちゃうけど、
それなら検索を嫌うようなもんでもないし… な…
922デフォルトの名無しさん
2018/06/23(土) 22:02:58.56ID:ZZklpiyn a1 : b1
a2 : b2
a から、b への辞書と、
b から、a への辞書の、両方を作る
a2 : b2
a から、b への辞書と、
b から、a への辞書の、両方を作る
923デフォルトの名無しさん
2018/06/23(土) 22:07:27.68ID:V32XRqjB924デフォルトの名無しさん
2018/06/23(土) 22:09:33.77ID:5Wb6fwhK n = (x/9600 > 4) ? 0 : 3 - log2f(x/9600);
入力を検証する手間を考えたらテーブル逆引きと大差ないけど
入力を検証する手間を考えたらテーブル逆引きと大差ないけど
925デフォルトの名無しさん
2018/06/23(土) 22:19:10.79ID:V32XRqjB926デフォルトの名無しさん
2018/06/23(土) 22:21:03.20ID:V32XRqjB 普通はこんなものはリニア検索でいい
927デフォルトの名無しさん
2018/06/23(土) 23:23:08.99ID:ZZklpiyn 普通、最適化でも、8個までは線形(全)探索・if 文
それ以上で、ジャンプテーブル・switch-case
それ以上で、ジャンプテーブル・switch-case
928デフォルトの名無しさん
2018/06/23(土) 23:47:49.24ID:UiVIxiJp >>927
ただのテーブル逆変換だぞ
なんでジャンプテーブル?
なんでswitch case?
リニア検索で問題なら2分検索
それでも遅ければハッシュその他のテーブル
簡単な演算を併用出来るものはする
じゃないか普通
ただのテーブル逆変換だぞ
なんでジャンプテーブル?
なんでswitch case?
リニア検索で問題なら2分検索
それでも遅ければハッシュその他のテーブル
簡単な演算を併用出来るものはする
じゃないか普通
929927
2018/06/24(日) 00:50:44.41ID:chBT6m1a コンパイラの最適化について書いた
if 文を8個以上書くと、ジャンプテーブルに変換されるってこと
if 文を8個以上書くと、ジャンプテーブルに変換されるってこと
930デフォルトの名無しさん
2018/06/24(日) 08:15:02.59ID:cbD8du/l931デフォルトの名無しさん
2018/06/24(日) 10:44:32.50ID:8StK2ZXu class clsAにconst member 変数を登録したいのだけどうまくいかない。
クラスコンストラクタでconst char *mes[] を{"abc","def"}のように
初期化するにはどうやるの?
クラスコンストラクタでconst char *mes[] を{"abc","def"}のように
初期化するにはどうやるの?
932デフォルトの名無しさん
2018/06/24(日) 10:57:11.49ID:8StK2ZXu //そもそもC++は文字列の配列を扱うことができるのか?
constexpr auto str1 = {"abc", "def"};
これがエラーするんだがなんでなの?
constexpr auto str1 = {"abc", "def"};
これがエラーするんだがなんでなの?
933デフォルトの名無しさん
2018/06/24(日) 11:00:18.70ID:8StK2ZXu constexpr string[] str1 = {"abc", "def"}; コンパイルエラー
constexpr string str1[] = {"abc", "def"}; コンパイルエラー
クッ、、、どうしてもうごかない。
constexpr string str1[] = {"abc", "def"}; コンパイルエラー
クッ、、、どうしてもうごかない。
934デフォルトの名無しさん
2018/06/24(日) 11:15:54.16ID:8StK2ZXu string str1 = "abc"; //OK
vector<int> dat(100,3); //ok
vector<string> str2("aaa",4); //error
こういうのもうごかない。
vector<int> dat(100,3); //ok
vector<string> str2("aaa",4); //error
こういうのもうごかない。
935デフォルトの名無しさん
2018/06/24(日) 11:23:27.77ID:8StK2ZXu 自分としてはストリングを多用するのでストリング配列が使えないと厳しい。
検索をしても例がなかなか出てこないので、Effectiv Modern C++という本
をamazonで買ってみたんだが、届いたので今見ているところだが、ここでも
string配列の記述を巧みに避けている。皆目出てこない。
string配列の扱い方ってどうやるの?
検索をしても例がなかなか出てこないので、Effectiv Modern C++という本
をamazonで買ってみたんだが、届いたので今見ているところだが、ここでも
string配列の記述を巧みに避けている。皆目出てこない。
string配列の扱い方ってどうやるの?
936デフォルトの名無しさん
2018/06/24(日) 11:52:20.14ID:/GbiIoLW 文字配列って良く分からないけど、Javaみたいに一文字だったりして?
{"a","b","c","d","e","f","g"}みたいな?
{"a","b","c","d","e","f","g"}みたいな?
937はちみつ餃子 ◆8X2XSCHEME
2018/06/24(日) 12:32:00.67ID:StWe8jKY938デフォルトの名無しさん
2018/06/24(日) 12:35:35.92ID:QFRKHUIu ["abc","def"];
939デフォルトの名無しさん
2018/06/24(日) 12:36:44.62ID:p8F2e5jx940デフォルトの名無しさん
2018/06/24(日) 13:13:44.88ID:8StK2ZXu 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
ここまで確認できた。ただしコンパイルが通っただけだから、動くかどうかは不明。
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デフォルトの名無しさん
2018/06/24(日) 13:37:02.58ID:8StK2ZXu //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"}){};//これもだめ
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"}){};//これもだめ
942デフォルトの名無しさん
2018/06/24(日) 13:38:12.37ID:zWtoG2OO サイズ不明だし無理だろ
943デフォルトの名無しさん
2018/06/24(日) 13:41:38.91ID:8StK2ZXu >内部的にヒープを使うようなクラスはほとんど constexpr 非対応だと思う。
constexpr char *mes1 = "abc"; //error
これもだめですね。ヒープは必要ないとおもいますが、、、
constexpr char *mes1 = "abc"; //error
これもだめですね。ヒープは必要ないとおもいますが、、、
944デフォルトの名無しさん
2018/06/24(日) 13:42:37.94ID:8StK2ZXu >>サイズ不明だし無理だろ
コンストラクトする時点でサイズは確定していますが、、、
コンストラクトする時点でサイズは確定していますが、、、
945デフォルトの名無しさん
2018/06/24(日) 13:45:06.66ID:p8F2e5jx お前はまずエラーメッセージをちゃんと読め。
946デフォルトの名無しさん
2018/06/24(日) 14:12:06.73ID:8StK2ZXu //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
以下省略
*/
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
以下省略
*/
947デフォルトの名無しさん
2018/06/24(日) 14:20:47.48ID:p8F2e5jx すまん、そっちはエラーメッセージじゃ分からん。
string str1[] = {"abc", "def"}; //error
とか
constexpr char *mes1 = "abc"; //error
とかの話。
string str1[] = {"abc", "def"}; //error
とか
constexpr char *mes1 = "abc"; //error
とかの話。
948デフォルトの名無しさん
2018/06/24(日) 14:38:12.08ID:iIKq/Q4Y string関数の第二引数には何の意味がありますか?
試しに文字列を2つ引数に入れても、第一引数しか出力しないみたいですが
↓です
string readFile(const char *filename)
{
ifstream ifs(filename);
return string(istreambuf_iterator<char>(ifs),
istreambuf_iterator<char>());
}
https://www.miraclelinux.com/tech-blog/1n4hgx
試しに文字列を2つ引数に入れても、第一引数しか出力しないみたいですが
↓です
string readFile(const char *filename)
{
ifstream ifs(filename);
return string(istreambuf_iterator<char>(ifs),
istreambuf_iterator<char>());
}
https://www.miraclelinux.com/tech-blog/1n4hgx
949デフォルトの名無しさん
2018/06/24(日) 14:46:22.41ID:iIKq/Q4Y すみません自己解決しました>>948
950デフォルトの名無しさん
2018/06/24(日) 14:58:47.68ID:8StK2ZXu >>947
string str2[] = {"abc", "def"}; //okでした。
constexpr 文字列は諦めました。多分相当難しい。
でおもうのだが、結局は普通の人は誰もconst char *配列の初期化について解らない。
というか、ファーム開発にC++を使う場合には文字列の配列はかなり重要でしかも
Ramが少ないのでこれをRom配置できないと致命的だ。ということでファーム開発
ではconst char *mes[] = {"zzz","aaa"}; こういう処理が必要になる。
しかしファーム開発をやらない人にとってはconstである理由はないので、この重要さ
には無関心なのだろう。
もちろん分かる人もいるが教えるのは恐ろしくめんどくさいか、非常に苦労して
マスターしたので簡単には教えたくない。
それほどC++において const char *配列 のクラスでの初期化は難しいのだろうと思う。
いやそもそもできないのかもしれないが、、、(そんなはずはないだろう)。しかし
できないとすると、クラス内で初期化するのは諦めてCで初期化してるのだろうか?
多くのファーム開発者は諦めてCで初期化してるのだろうな。
string str2[] = {"abc", "def"}; //okでした。
constexpr 文字列は諦めました。多分相当難しい。
でおもうのだが、結局は普通の人は誰もconst char *配列の初期化について解らない。
というか、ファーム開発にC++を使う場合には文字列の配列はかなり重要でしかも
Ramが少ないのでこれをRom配置できないと致命的だ。ということでファーム開発
ではconst char *mes[] = {"zzz","aaa"}; こういう処理が必要になる。
しかしファーム開発をやらない人にとってはconstである理由はないので、この重要さ
には無関心なのだろう。
もちろん分かる人もいるが教えるのは恐ろしくめんどくさいか、非常に苦労して
マスターしたので簡単には教えたくない。
それほどC++において const char *配列 のクラスでの初期化は難しいのだろうと思う。
いやそもそもできないのかもしれないが、、、(そんなはずはないだろう)。しかし
できないとすると、クラス内で初期化するのは諦めてCで初期化してるのだろうか?
多くのファーム開発者は諦めてCで初期化してるのだろうな。
951デフォルトの名無しさん
2018/06/24(日) 15:43:14.02ID:zWtoG2OO952デフォルトの名無しさん
2018/06/24(日) 16:11:08.57ID:zWtoG2OO あれコンパイル通るけど未指定だと動的確保してplacement newでもしないとだめかなこれ
953デフォルトの名無しさん
2018/06/24(日) 16:11:30.09ID:8StK2ZXu class clsA
{
private:
const char *m_name;
clsA();
};
clsA::clsA() : m_name("Bike"){};
これはOK、しかし配列はできない。
{
private:
const char *m_name;
clsA();
};
clsA::clsA() : m_name("Bike"){};
これはOK、しかし配列はできない。
954sage
2018/06/24(日) 16:24:15.11ID:zWtoG2OO class a
{
public:
const char* name[]; ここで非標準だなんだの警告でる
a():name{ "aaa","bbb" }
{
}
};
vsだとこれでコンパイルは通るしぱっと見正常だけどそのまま使うとたぶんどっかでメモリ壊すんじゃないかな
配列の数指定しといたほうが無難な気がするけど
{
public:
const char* name[]; ここで非標準だなんだの警告でる
a():name{ "aaa","bbb" }
{
}
};
vsだとこれでコンパイルは通るしぱっと見正常だけどそのまま使うとたぶんどっかでメモリ壊すんじゃないかな
配列の数指定しといたほうが無難な気がするけど
955デフォルトの名無しさん
2018/06/24(日) 16:39:11.76ID:Q9QWMZ9P C++にはサイズ不定の配列は無いからサイズ指定しないと無理だよ
コンストラクト時にわかってるじゃないか、って話もあったけど
中身の配列数が変わったらそれは違う型になる
つまりテンプレートが必要になる
配列の要素数を推定させるのは、C++17で入ったクラステンプレートの引数推定を使えば一応出来るけど
コンストラクト時にわかってるじゃないか、って話もあったけど
中身の配列数が変わったらそれは違う型になる
つまりテンプレートが必要になる
配列の要素数を推定させるのは、C++17で入ったクラステンプレートの引数推定を使えば一応出来るけど
956デフォルトの名無しさん
2018/06/24(日) 17:24:18.36ID:8StK2ZXu //C++はchar *[]のコンストラクタでの初期化はできるのか?
class clsA
{
private:
const char *m_name[2];
clsA():m_name{"aaa","bbbb"}{}
};
これでもエラーします。
class clsA
{
private:
const char *m_name[2];
clsA():m_name{"aaa","bbbb"}{}
};
これでもエラーします。
957デフォルトの名無しさん
2018/06/24(日) 17:42:22.01ID:zWtoG2OO なんてエラーでてるの
958デフォルトの名無しさん
2018/06/24(日) 17:54:03.23ID:8StK2ZXu //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
*/
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.16ID:8StK2ZXu それconst つけるの忘れてたが、つけた場合もエラー表示は同じだね。
960デフォルトの名無しさん
2018/06/24(日) 18:04:27.08ID:p8F2e5jx あなたの使っているコンパイラは、おそらくC++11未対応です。
constexprはC++11の機能なので、そのコンバイラでは使えないか、
使えたとしても標準とは異なる動作をする可能性があります。
constexprはC++11の機能なので、そのコンバイラでは使えないか、
使えたとしても標準とは異なる動作をする可能性があります。
961デフォルトの名無しさん
2018/06/24(日) 18:18:27.13ID:8StK2ZXu962はちみつ餃子 ◆8X2XSCHEME
2018/06/24(日) 18:23:43.69ID:StWe8jKY >>961
対応していてもデフォルトでは C++11 の挙動にならない (オプション指定すると対応する) ようなものも有りうる。
対応していてもデフォルトでは C++11 の挙動にならない (オプション指定すると対応する) ようなものも有りうる。
963デフォルトの名無しさん
2018/06/24(日) 18:36:49.63ID:8StK2ZXu964デフォルトの名無しさん
2018/06/24(日) 19:43:42.27ID:G0tizpK6 勘違いしてたらすまないけど↓みたいな事がしたいの?
https://ideone.com/Zm8LO5
https://ideone.com/Zm8LO5
965デフォルトの名無しさん
2018/06/24(日) 22:24:29.32ID:8StK2ZXu >>964
凄い!!。まさにそれです。こちらでもコンパイル通りました。
難しいなー。
もうコンストラクタでの初期化はすっかり諦めて代替案を作っていたところだけ
ど、それを丁重に拝借いたします。ありがとう。
凄い!!。まさにそれです。こちらでもコンパイル通りました。
難しいなー。
もうコンストラクタでの初期化はすっかり諦めて代替案を作っていたところだけ
ど、それを丁重に拝借いたします。ありがとう。
966デフォルトの名無しさん
2018/06/24(日) 22:30:41.96ID:EmcxYm71 借りるってことは返すんだよね
967デフォルトの名無しさん
2018/06/24(日) 23:08:30.10ID:8StK2ZXu >>966
もらい受けたいところだけども、意味が理解できるかどうか? あなたは意味が
わかりますか?
clsA() : clsA((const char* const []){"mike","tetu",nullptr}) {};
(const char* const []){"mike","tetu",nullptr}
これは何を意味してるの?
もらい受けたいところだけども、意味が理解できるかどうか? あなたは意味が
わかりますか?
clsA() : clsA((const char* const []){"mike","tetu",nullptr}) {};
(const char* const []){"mike","tetu",nullptr}
これは何を意味してるの?
968デフォルトの名無しさん
2018/06/24(日) 23:09:16.86ID:chBT6m1a 「c++ constexpr 文字列」で検索すれば?
969デフォルトの名無しさん
2018/06/25(月) 00:15:08.68ID:RQXh1ivn void func1(int a) { printf("%d\n", a); }
void func2(int a, int b) { printf("%d,%d\n", a, b);}
template<?????>
class Test
{
public:
void method(void) { (templateの引数で func1(int a) か func2(int a, in b)を呼ぶ) }
private:
int a;
in b;
};
のような事をしたいのですが、引数が1つか2つの関数をそれぞれ名前でtemplate引数にして
記述したいのですが、うまくいきません。どうすれば良いでしょうか?
例えば template < void F(int)> とすると Test<func1>() でいけるのですが、func2の場合が
表現出来ません。
void func2(int a, int b) { printf("%d,%d\n", a, b);}
template<?????>
class Test
{
public:
void method(void) { (templateの引数で func1(int a) か func2(int a, in b)を呼ぶ) }
private:
int a;
in b;
};
のような事をしたいのですが、引数が1つか2つの関数をそれぞれ名前でtemplate引数にして
記述したいのですが、うまくいきません。どうすれば良いでしょうか?
例えば template < void F(int)> とすると Test<func1>() でいけるのですが、func2の場合が
表現出来ません。
970デフォルトの名無しさん
2018/06/25(月) 01:49:02.18ID:Gwlgg6/B class class1 {
private: int m_a;
public:
class1(int a) : m_a(a) {}
class1(class1 const& rhs) { m_a = rhs.m_a; }
void method(void) { printf("%d\n", m_a); }
};
class class2 {
private: int m_a;
int m_b;
public:
class2(int a, int b) : m_a(a), m_b(b) {}
class2(class2 const& rhs) { m_a = rhs.m_a; m_b = rhs.m_b; }
void method(void) { printf("%d,%d\n", m_a, m_b); }
};
template<class _Myclass> class Test {
private: _Myclass m_myClass;
public:
Test(_Myclass myClass) : m_myClass(myClass) {}
void method(void) { m_myClass.method(); }
};
int main() {
Test<class1> x(class1(1));
Test<class2> y(class2(2, 3));
x.method();
y.method();
}
意味があるのか分からないがとりあえずコレで
もしくはTest::methodを可変引数にしてprintfにその可変引数を渡すしかない
まずなにがやりたいのか分からないからテキトーに書いてやったぞ
private: int m_a;
public:
class1(int a) : m_a(a) {}
class1(class1 const& rhs) { m_a = rhs.m_a; }
void method(void) { printf("%d\n", m_a); }
};
class class2 {
private: int m_a;
int m_b;
public:
class2(int a, int b) : m_a(a), m_b(b) {}
class2(class2 const& rhs) { m_a = rhs.m_a; m_b = rhs.m_b; }
void method(void) { printf("%d,%d\n", m_a, m_b); }
};
template<class _Myclass> class Test {
private: _Myclass m_myClass;
public:
Test(_Myclass myClass) : m_myClass(myClass) {}
void method(void) { m_myClass.method(); }
};
int main() {
Test<class1> x(class1(1));
Test<class2> y(class2(2, 3));
x.method();
y.method();
}
意味があるのか分からないがとりあえずコレで
もしくはTest::methodを可変引数にしてprintfにその可変引数を渡すしかない
まずなにがやりたいのか分からないからテキトーに書いてやったぞ
971デフォルトの名無しさん
2018/06/25(月) 03:37:15.06ID:3f3crQyZ const char *[]の初期化だけれども
clsA(const char* const name[]) : m_name(name) {};
これはまあ何となく意味が解る。m_name <−−nameってことだよね。
clsA() : clsA((const char* const []){"mike","tetu",nullptr}) {};
しかしこれはどういう意味だろうか?
clsA <−− (const char* const []){"mike","tetu",nullptr}
ラムダ関数?かとおもったが、前半はcastだろうか?
m_name <−−name
clsA <−− {"mike","tetu",nullptr}
この二つがセットで意味を持つんだろうな。
const char *[] の初期化が3つくらいあったらどうするんだろうね。
まるでクイズを解いてるみたいだよ。
いくらなんでも言語仕様としてやはり不味いよね。
clsA(const char* const name[]) : m_name(name) {};
これはまあ何となく意味が解る。m_name <−−nameってことだよね。
clsA() : clsA((const char* const []){"mike","tetu",nullptr}) {};
しかしこれはどういう意味だろうか?
clsA <−− (const char* const []){"mike","tetu",nullptr}
ラムダ関数?かとおもったが、前半はcastだろうか?
m_name <−−name
clsA <−− {"mike","tetu",nullptr}
この二つがセットで意味を持つんだろうな。
const char *[] の初期化が3つくらいあったらどうするんだろうね。
まるでクイズを解いてるみたいだよ。
いくらなんでも言語仕様としてやはり不味いよね。
972デフォルトの名無しさん
2018/06/25(月) 04:00:03.54ID:3f3crQyZ わかった。コンストラクタに引数がないディフォールトでは
clsA <−− {"mike","tetu",nullptr}
そしてm_nameは一つしかないから、m_name= {"mike","tetu",nullptr}となる。
引数を持つ場合は
clsA(const char* const name[]) : m_name(name) {};
m_name <-- name;
になる。
じゃあconstのメンバ変数が二つある場合はどうするんだろうか?
clsA:clsA( {"xxx"}),clsA({"yyy"})
{}
とは書けない。変数を明示しないといけないから、、、
clsA:m_name1( {"xxx","abc"}), m_name2({"yyy","def"}){}
必然的にとなる。
じゃあ最初から
clsA:m_name1( {"xxx","abc"}){}
こう書いていた方が分かりやすいし、これが成り立たないと論理破綻する。
clsA <−− {"mike","tetu",nullptr}
そしてm_nameは一つしかないから、m_name= {"mike","tetu",nullptr}となる。
引数を持つ場合は
clsA(const char* const name[]) : m_name(name) {};
m_name <-- name;
になる。
じゃあconstのメンバ変数が二つある場合はどうするんだろうか?
clsA:clsA( {"xxx"}),clsA({"yyy"})
{}
とは書けない。変数を明示しないといけないから、、、
clsA:m_name1( {"xxx","abc"}), m_name2({"yyy","def"}){}
必然的にとなる。
じゃあ最初から
clsA:m_name1( {"xxx","abc"}){}
こう書いていた方が分かりやすいし、これが成り立たないと論理破綻する。
973デフォルトの名無しさん
2018/06/25(月) 04:04:26.64ID:3f3crQyZ class clsA{
private:
const char* const* m_name1;
const char* const* m_name2;
public:
clsA() : m_name1((const char* const []){"mike","tetu",nullptr}), m_name2((const char* const []){"mike2","tetu2",nullptr}) {};
clsA(const char* const name[]) : m_name1(name) {};
void put(){
for(const char* const * p=m_name1; *p!=nullptr ;++p ) {
printf(*p);
}
};
virtual ~clsA() {};
};
実験したみたが、コンパイルは通った。
private:
const char* const* m_name1;
const char* const* m_name2;
public:
clsA() : m_name1((const char* const []){"mike","tetu",nullptr}), m_name2((const char* const []){"mike2","tetu2",nullptr}) {};
clsA(const char* const name[]) : m_name1(name) {};
void put(){
for(const char* const * p=m_name1; *p!=nullptr ;++p ) {
printf(*p);
}
};
virtual ~clsA() {};
};
実験したみたが、コンパイルは通った。
974デフォルトの名無しさん
2018/06/25(月) 05:56:57.36ID:MAmRCfEQ >>964のソースをclangでビルドしたら最初の結果が文字化けする。
環境依存で動作が変わるようなソースコードを参考にしてはいけない。
環境依存で動作が変わるようなソースコードを参考にしてはいけない。
975デフォルトの名無しさん
2018/06/26(火) 09:01:37.25ID:6tjGTw22 >>969
template<class ... args>
class clsTest {
public:
void func1(int dt) {}
void func1(int dt1, int dt2) {}
void func2(args...) {
}
};
int main()
{
clsTest<int, int, int> a;
clsTest<int, int, char *> b;
a.func2(2, 3, 4);
b.func2(5, 6, (char *)"test");
a.func1(2);
a.func1(2, 3);
return 0;
}
template<class ... args>
class clsTest {
public:
void func1(int dt) {}
void func1(int dt1, int dt2) {}
void func2(args...) {
}
};
int main()
{
clsTest<int, int, int> a;
clsTest<int, int, char *> b;
a.func2(2, 3, 4);
b.func2(5, 6, (char *)"test");
a.func1(2);
a.func1(2, 3);
return 0;
}
976デフォルトの名無しさん
2018/06/28(木) 10:37:33.14ID:dRU/pr3A c++です
LNK2005 DllMain は既に vstplugmain.obj で定義されています
1>vstplugmain.obj : error LNK2005: DllMain は既に vstplugmain.obj で定義されています。
左と右が違うファイルだったら順序を入れ替えるだけでよかったのですが
両方vstplugmain.objで困ってます
どのようにすれば解決できるでしょうか?
LNK2005 DllMain は既に vstplugmain.obj で定義されています
1>vstplugmain.obj : error LNK2005: DllMain は既に vstplugmain.obj で定義されています。
左と右が違うファイルだったら順序を入れ替えるだけでよかったのですが
両方vstplugmain.objで困ってます
どのようにすれば解決できるでしょうか?
977デフォルトの名無しさん
2018/06/28(木) 11:09:44.92ID:9ql/FcZD 自動でリンクしてるライブラリと明示的にリンカに渡してるパス違いの同じライブラリで衝突してんんじゃないの?
知らんけど
知らんけど
978デフォルトの名無しさん
2018/06/28(木) 11:44:03.03ID:dRU/pr3A 検索してみたのですが
vstplugmain.objは一つしか無いようです
vstplugmain.objは一つしか無いようです
979デフォルトの名無しさん
2018/06/28(木) 12:06:53.39ID:dRU/pr3A もしかしたら関係あるのかもしれないので参考までに記述します
以下のようなエラーも同時に発生しています
vstplugmain.obj : error LNK2001: 外部シンボル ""class AudioEffect * __cdecl createEffectInstance(__int64 (__cdecl*)(struct AEffect *,int,int,__int64,void *,float))"
(?createEffectInstance@@YAPEAVAudioEffect@@P6A_JPEAUAEffect@@HH_JPEAXM@Z@Z)" は未解決です。
LNK2001 外部シンボル ""class AudioEffect * __cdecl createEffectInstance(__int64 (__cdecl*)(struct AEffect *,int,int,__int64,void *,float))"
(?createEffectInstance@@YAPEAVAudioEffect@@P6A_JPEAUAEffect@@HH_JPEAXM@Z@Z)" は未解決です。 Dll6 source\repos\Dll6\Dll6\vstplugmain.obj 1
よろしくおねがいします
以下のようなエラーも同時に発生しています
vstplugmain.obj : error LNK2001: 外部シンボル ""class AudioEffect * __cdecl createEffectInstance(__int64 (__cdecl*)(struct AEffect *,int,int,__int64,void *,float))"
(?createEffectInstance@@YAPEAVAudioEffect@@P6A_JPEAUAEffect@@HH_JPEAXM@Z@Z)" は未解決です。
LNK2001 外部シンボル ""class AudioEffect * __cdecl createEffectInstance(__int64 (__cdecl*)(struct AEffect *,int,int,__int64,void *,float))"
(?createEffectInstance@@YAPEAVAudioEffect@@P6A_JPEAUAEffect@@HH_JPEAXM@Z@Z)" は未解決です。 Dll6 source\repos\Dll6\Dll6\vstplugmain.obj 1
よろしくおねがいします
980デフォルトの名無しさん
2018/06/28(木) 17:14:50.29ID:hh115pnF エラーログの上から順番に解決するようにしたらいい
981デフォルトの名無しさん
2018/06/29(金) 09:50:56.72ID:8ZX2E7EU 無事解決しました
ありがとうございました
ありがとうございました
982デフォルトの名無しさん
2018/06/29(金) 10:22:32.55ID:h8zo0ENm >>981
そういう場合は、経緯を説明するのが、考えようとしてくれた人への礼儀。
そういう場合は、経緯を説明するのが、考えようとしてくれた人への礼儀。
983デフォルトの名無しさん
2018/06/29(金) 10:53:16.69ID:OiiVA+37 ロベールのC++の本の typedef の説明ですが、よく分かりません。
typedef int* IntPtr;
int n = 0;
const IntPtr p = &n;
IntPtr const q = &n;
はどちらも、
int* const p;
int* const q;
の意味になるそうです。
分からないのは、ロベールさんの解釈の部分です。
const int* p; → 「const の右側にあるものが const になる」
int* const q; → 「const の右側にあるものが const になる」
と解釈すればよいと説明してます。
この解釈が
const IntPtr
IntPtr const
の場合にも通用するというのです。
typedef int* IntPtr;
int n = 0;
const IntPtr p = &n;
IntPtr const q = &n;
はどちらも、
int* const p;
int* const q;
の意味になるそうです。
分からないのは、ロベールさんの解釈の部分です。
const int* p; → 「const の右側にあるものが const になる」
int* const q; → 「const の右側にあるものが const になる」
と解釈すればよいと説明してます。
この解釈が
const IntPtr
IntPtr const
の場合にも通用するというのです。
984デフォルトの名無しさん
2018/06/29(金) 10:53:56.86ID:OiiVA+37 const IntPtr = const int*
IntPtr const = int* const
ではないのでしょうか?
IntPtr const = int* const
ではないのでしょうか?
985デフォルトの名無しさん
2018/06/29(金) 10:55:12.72ID:OiiVA+37 const IntPtr p = &n;
IntPtr const q = &n;
↑「const の右にあるのは p や q なので、 p や q が const になるのです。」
と説明していますが、これが意味不明です。
IntPtr const q = &n;
↑「const の右にあるのは p や q なので、 p や q が const になるのです。」
と説明していますが、これが意味不明です。
986デフォルトの名無しさん
2018/06/29(金) 10:56:58.22ID:OiiVA+37 >>985
の論法を↓に適用すれば、
const の右にあるのは p や q なので、 p や q が const になるのです。
となってしまいますが、 p は const ではないですよね。
q は const ですが。
const int* p;
int* const q;
の論法を↓に適用すれば、
const の右にあるのは p や q なので、 p や q が const になるのです。
となってしまいますが、 p は const ではないですよね。
q は const ですが。
const int* p;
int* const q;
987デフォルトの名無しさん
2018/06/29(金) 11:34:56.01ID:rwm1MJ+D988デフォルトの名無しさん
2018/06/29(金) 12:00:29.81ID:nFp4wdEK i.csvには1行に名前と整数値で点数3つ書かれているのが10行あり、読み込んで点数の和を加えて表示しようとしましたが和が出てきません。また¥nを打っているのに改行されないです。理由を教えてください。配列にしたのはこの後にも操作をするためです。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
const char ifname[] ="i.csv";
int a,b,c;
char name[30][100];
int sum[30];
int i;
FILE *ifp;
ifp=fopen(ifname,"r"); /*読み込み込みモードでopen*/
if(ifp==NULL){
printf("ファイルが開けない");
exit(1);
}
for(i=0;i<=29;i++){
if(fscanf(ifp,"%s%d%d%d",name[i],&a,&b,&c)==EOF)
break;
else
sum[i]=a+b+c;
printf("%s %d %d %d %d\n",name[i],a,b,c,sum[i]);
}
fclose(ifp);
}
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
const char ifname[] ="i.csv";
int a,b,c;
char name[30][100];
int sum[30];
int i;
FILE *ifp;
ifp=fopen(ifname,"r"); /*読み込み込みモードでopen*/
if(ifp==NULL){
printf("ファイルが開けない");
exit(1);
}
for(i=0;i<=29;i++){
if(fscanf(ifp,"%s%d%d%d",name[i],&a,&b,&c)==EOF)
break;
else
sum[i]=a+b+c;
printf("%s %d %d %d %d\n",name[i],a,b,c,sum[i]);
}
fclose(ifp);
}
989デフォルトの名無しさん
2018/06/29(金) 12:06:09.83ID:nFp4wdEK 10行ではなく30行でした、すみません
990デフォルトの名無しさん
2018/06/29(金) 12:10:17.92ID:OiiVA+37 >>987
ありがとうございました。
ありがとうございました。
991デフォルトの名無しさん
2018/06/29(金) 12:40:26.79ID:nFp4wdEK 988ですが自力で解決出来たので大丈夫です
992デフォルトの名無しさん
2018/06/29(金) 14:45:38.42ID:+YHimQiw Windows10で、デスクトップのアイコンと壁紙の間のレイヤーに描画したいです。
どのように設定すればいいでしょうか?
VisualStudio2017/C++
どのように設定すればいいでしょうか?
VisualStudio2017/C++
993デフォルトの名無しさん
2018/06/29(金) 14:50:24.25ID:+YHimQiw 何がしたいかというと、カレンダーを表示させたいです。
994デフォルトの名無しさん
2018/06/29(金) 14:52:35.06ID:+YHimQiw 小出しですみません。カレンダー機能はMFCで作成済みです。
995デフォルトの名無しさん
2018/06/29(金) 22:49:34.96ID:DjTQOr6S 無理でしょうか?
996デフォルトの名無しさん
2018/06/29(金) 23:03:37.60ID:DjTQOr6S C#ですが、方法が見つかったので自力でやってみます。
https://www.codeproject.com/Articles/856020/Draw-Behind-Desktop-Icons-in-Windows-plus
https://www.codeproject.com/Articles/856020/Draw-Behind-Desktop-Icons-in-Windows-plus
997デフォルトの名無しさん
2018/07/01(日) 01:14:10.80ID:UA/DrxK6 t
998デフォルトの名無しさん
2018/07/01(日) 01:14:30.62ID:UA/DrxK6 v
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 【米FRB】0.25%利下げ決定 3会合連続、雇用下支え [蚤の市★]
- 訪米認証「ESTA」、SNS利用情報の提出義務化へ 日本人観光客も対象に [蚤の市★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- 「身を切る改革」どこへ? 維新「身内」への公金支出、地方でも続々 [蚤の市★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 【悲報】俺たちの国民民主党、高市総理の補正予算賛成へwへwwwwwwwwwwwお米券確定wwwwww [257926174]
- 福井県民の最大の罪は俺を神奈川に放流しちゃったこと
- ゲッダン
- 【朗報】VTuber、とうとうスパロボに参戦する
- 高橋洋一、終わる [523957489]
- 毎日菊花茶飲んでたら美肌になったよ
