【初心者歓迎】C/C++室 Ver.53【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/04/24(木) 07:23:05ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.59【環境依存OK】(実質Ver.52)
http://pc11.2ch.net/test/read.cgi/tech/1206809426/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2008/04/24(木) 07:24:43【初心者歓迎】C/C++室 Ver.48【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1202141921/
【初心者歓迎】C/C++室 Ver.49【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1203478421/
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1204124499/
【初心者歓迎】C/C++室 Ver.51【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1205496128/
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1204124447/
【初心者歓迎】C/C++室 Ver.59【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1206809426/
0003デフォルトの名無しさん
2008/04/24(木) 07:46:050004デフォルトの名無しさん
2008/04/24(木) 07:53:38オーバーロードの関係でそうしたのかな。
0005デフォルトの名無しさん
2008/04/24(木) 10:43:420006デフォルトの名無しさん
2008/04/24(木) 12:51:25簡単に言えばそういうことだ。
「std::cout << '\n';」で「10」とか印字されても困るだろ。
0007デフォルトの名無しさん
2008/04/24(木) 17:10:31メソッドの中で入れ子になっていても問題ないですか?
void CHoge::Method()
{
try{
// 処理1
try{
// 処理2
}
catch(...){
// 処理2の例外処理
}
// 処理3
}
catch(...){
// 処理1、3の例外処理
}
}
みたいな感じです
0008デフォルトの名無しさん
2008/04/24(木) 17:12:470009デフォルトの名無しさん
2008/04/24(木) 17:13:54あと、
void func() try {
} catch (...) {
}
なんて書き方もOK
0011デフォルトの名無しさん
2008/04/24(木) 18:17:01またこのような感じの関数はどういった呼び出し方をすればよいのでしょうか。
どなたか教えていただけると幸いです。
0012デフォルトの名無しさん
2008/04/24(木) 18:21:01(メンバ)変数を書き換えないという指定
0013デフォルトの名無しさん
2008/04/24(木) 18:26:24このようなテンプレートテンプレートパラメータが
なぜこんな書き方ができるのか今一理解できません。
どこか詳しく解説してるとこはないものでしょうか?
0014デフォルトの名無しさん
2008/04/24(木) 19:35:22--- ヘッダ ----
typedef struct _STRUCT1{
long code;
CArray<long, long> data;
}STRUCT1;
CArray<STRUCT1, STRUCT1&> code_data;
--- ソース ----
STRUCT1 st;
st.code = 1;
st.data.Add(100);
code_data.Add(st);
みたいな感じでやると、最後の行でコンパイルエラーになるんですが
CArrayの中にCArrayを含む構造ってダメなんでしょうか?
途中までいい気でコーディングして、最後にエラー出てしまって
途方にくれています。
今更ほかの方法で似たような事やるのは大変で・・・。
よい方法ないでしょうか。
0015デフォルトの名無しさん
2008/04/24(木) 19:38:36a[0] = 0; a[1] = 0; a[2] = 0;
a[0] = 1; a[1] = 0; a[2] = 0;
a[0] = 0; a[1] = 1; a[2] = 0;
a[0] = 0; a[1] = 0; a[2] = 1;
a[0] = 1; a[1] = 1; a[2] = 0;
a[0] = 1; a[1] = 0; a[2] = 1;
a[0] = 0; a[1] = 1; a[2] = 1;
a[0] = 1; a[1] = 1; a[2] = 1;
行と行の間には何かしらの処理が入る。
これをfor文でまとめて書くにはにはどうすればいい?
0016デフォルトの名無しさん
2008/04/24(木) 19:50:470017デフォルトの名無しさん
2008/04/24(木) 19:56:28くやしいわ
0018デフォルトの名無しさん
2008/04/24(木) 19:57:02STRUCT1 st;
STRUCT1 st2 = st;
st2 = st;
の3行を書いて、コンパイル通る?
あとコンパイルエラーのメッセージは?
0019デフォルトの名無しさん
2008/04/24(木) 20:08:11for( int i = 0; i < 7; i++ ) {
a[0]=(0xb2>>i)&1;a[1]=(0xd4>>i)&1:a[2]=(0xe8>>i)&1;
0020デフォルトの名無しさん
2008/04/24(木) 20:09:310021デフォルトの名無しさん
2008/04/24(木) 20:10:06for (int i=0; i < 8; ++i)
std::cout << bits[i * 4] << ", " << bits[i * 4 + 1] << ", " << bits[i * 4 + 2] << "\n";
0022デフォルトの名無しさん
2008/04/24(木) 20:10:520023デフォルトの名無しさん
2008/04/24(木) 20:15:16{
const m = 076534210 ;
bool a[] = { ((m>>(i+0))& )!=0 ,((m>>(i+1))&1)!=0 ,((m>>(i+2))&1)!= 0} ;
なにかしらの処理
}
うーん、いまいち
0024デフォルトの名無しさん
2008/04/24(木) 20:17:41綺麗なのできねぇかなぁ
0025デフォルトの名無しさん
2008/04/24(木) 20:19:310026デフォルトの名無しさん
2008/04/24(木) 20:23:23#define NELEMS(array) (sizeof (array) / sizeof (array)[0])
#define GET_BIT(n, b) ((n) & (1u << (b)))
static const unsigned int flags[] = { 0, 1, 2, 4, 3, 5, 6, 7 };
for (int i = 0; i < NELEMS(flags); i++) {
GET_BIT(flags[i], 0) と
GET_BIT(flags[i], 1) と
GET_BIT(flags[i], 2) を使う
}
0027デフォルトの名無しさん
2008/04/24(木) 20:27:54結構頭の体操としては面白い
0028デフォルトの名無しさん
2008/04/24(木) 20:28:050029デフォルトの名無しさん
2008/04/24(木) 20:30:11たとえばファイルオープンするときなどです。
0030デフォルトの名無しさん
2008/04/24(木) 20:31:52003115
2008/04/24(木) 20:32:32今回はなんとかできました。
ヒントをいただいたので配列の長さがNの時も考えようと思います
0032デフォルトの名無しさん
2008/04/24(木) 20:40:150033デフォルトの名無しさん
2008/04/24(木) 20:40:340034デフォルトの名無しさん
2008/04/24(木) 20:42:57パスの前に "\\\\\?\\" を付けるといいらしいが、
実際にやってみると出来ないと聞いたこともある。
0035デフォルトの名無しさん
2008/04/24(木) 20:45:500036デフォルトの名無しさん
2008/04/24(木) 20:48:520037デフォルトの名無しさん
2008/04/24(木) 20:49:520038デフォルトの名無しさん
2008/04/24(木) 20:55:01ttp://www.cppll.jp/cppreference/
0039デフォルトの名無しさん
2008/04/24(木) 21:03:17しかし最近のはwebも新形式ヘルプも重い罠
0040デフォルトの名無しさん
2008/04/24(木) 21:08:29古めの C/C++ のドラフトとか。英語だけど。
0041デフォルトの名無しさん
2008/04/24(木) 21:28:34すみません 100文字は出来ますが300文字だと無理になります
どうすればいいですか?
#include <windows.h>
int main(){
int r; wchar_t e[1000]=L"\\\\\?\\c:\\";
//100文字のディレクトリを生成してみる
fore(r,100)e[r+7]=L'a'; e[7+r]=L'\\'; e[8+r]=0;
CreateDirectoryW(e,NULL);
//300文字のディレクトリを生成してみる
fore(r,300)e[r+7]=L'b'; e[7+r]=L'\\'; e[8+r]=0;
CreateDirectoryW(e,NULL);
}
0042デフォルトの名無しさん
2008/04/24(木) 21:32:490043デフォルトの名無しさん
2008/04/24(木) 21:34:42でフルパスの時32767まで。
0044デフォルトの名無しさん
2008/04/24(木) 21:37:09トン 実験してみます
0045デフォルトの名無しさん
2008/04/24(木) 21:55:42トン できました!
int main(){
int r;
wchar_t g[1000]=L"\\\\\?\\c:\\",h[]=L"aaaaaaaaaa\\";
for(r=0;r<30;r++){wcscat(g,h); CreateDirectoryW(g,NULL);}
wcscat(g,L"bbbbb\\"); CreateDirectoryW(g,NULL);
}
0046デフォルトの名無しさん
2008/04/24(木) 22:48:31004746
2008/04/24(木) 22:52:57ちなみにVC使う予定です
0048デフォルトの名無しさん
2008/04/24(木) 22:59:34どういう使い方をしたいのかで変わってくると思う。
0049デフォルトの名無しさん
2008/04/24(木) 23:01:530050デフォルトの名無しさん
2008/04/24(木) 23:19:42学校の勉強か、趣味か、仕事か、作りたいものでも有るのか、他。
それと基礎知識。
多言語の経験有るとか、プログラミング初心者とか。
0051デフォルトの名無しさん
2008/04/24(木) 23:37:03[やさしいC]あたりでいいんじゃないでしょうか?
個人的意見ですけど最初はIDE(VC等の統合開発環境)使わずに
コンパイラだけ用意して勉強したほうがいいかと。
0052デフォルトの名無しさん
2008/04/24(木) 23:53:04アプリ系らしいけども
プログラミング自体初心者なので何から始めたらいいやらで
0053デフォルトの名無しさん
2008/04/24(木) 23:56:430054デフォルトの名無しさん
2008/04/25(金) 00:03:35使いもんにならんwindows 育ちなど
0055デフォルトの名無しさん
2008/04/25(金) 00:04:38それでも Windows で慣れてないと困るけどな。
ただ、Web 系するだけなら別に Windows である必要は無いな。
0056デフォルトの名無しさん
2008/04/25(金) 00:05:41仕事(実務がてらの教育な気もするけど)なら、最短経路ってことで、
プラットホーム(LinuxとかWindowsとか)と、
本当にCなのか、それともC++でもいいのか聞いた方がいい。
0057デフォルトの名無しさん
2008/04/25(金) 00:07:49概ね同意だけど、一つのプラットホームしか知らない奴も結構使えない。
0058デフォルトの名無しさん
2008/04/25(金) 00:32:33コメントの部分でエラーになってしまいます……。
class ca {
public:
int (*pa)();
int nasi(void);
ca(void);
}ca1;
int ca::nasi(void){return 0;}
ca::ca(void) {pa = nasi;} //コンパイルエラー
0059デフォルトの名無しさん
2008/04/25(金) 00:36:20http://www.google.com/search?q=%E3%83%A1%E3%83%B3%E3%83%90%E9%96%A2%E6%95%B0%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF&btnG=%E6%A4%9C%E7%B4%A2
0061デフォルトの名無しさん
2008/04/25(金) 00:42:52006258
2008/04/25(金) 00:51:53ありがとうございます。おかげでできました。
これからはもう少し自分でも調べるようにします。
class ca {
public:
int (ca::*pa)();
int nasi(void);
ca(void);
}ca1;
int ca::nasi(void){return 0;}
ca::ca(void) {pa = &ca::nasi;}
0063デフォルトの名無しさん
2008/04/25(金) 02:53:11亀レスですまんけど、何故そういう書き方ができるか、というより
そういう書き方をする意味ならある。
確かそのようにニ重にテンプレート指定すると、
template <template <class> class T> class hoge{};
とした場合に、hogeのインスタンスを宣言するときに
hoge< fuga<monyu> > Hoge;
ではなく
hoge<fuga> Hoge;
で済むというメリットがあったと思う。
fugaもテンプレートクラスであるにも関わらず、fugaのテンプレート引数は
指定しなくていい(ただしデメリットもあったと思うけど)。
あまり覚えてないので大して助言できなくてスマン。
0064デフォルトの名無しさん
2008/04/25(金) 04:14:34hogeクラスがmonyuの型を要求するような実体化を伴う場合、
(hogeクラスからfugaクラスのメンバ関数を呼ぶ場合でも。中でmonyuの型が必要なら)
実体化に失敗するんだったと思う。
その代わり、hogeクラスはfugaクラスのテンプレート引数に自由に型を
指定して利用することが出来る(もちろん文法が通る場合に限るが)。
0065デフォルトの名無しさん
2008/04/25(金) 05:06:36詳しい説明感謝です。
他スレでも聞いてしまってましたが、
そっちとはまた違った説明で、おかげで
かなり納得できました。
0066デフォルトの名無しさん
2008/04/25(金) 05:15:30すまん、そっちの説明どんなだったか教えて欲しいかもw
あんま使ったことない用法だから自信ないので・・
0067デフォルトの名無しさん
2008/04/25(金) 05:22:13ダイアログ1のヘッダーに paintDlg2 m_dlgPaint; を記述しても
';' が、識別子 'm_dlgPaint' の前に必要です。
というコンパイルエラーがでます。
インクルードの順序は確認したのですがうまくいきません。
2008で自動で変数追加しようとしても変数の種類が選べなくてよくわからないんです。
0068デフォルトの名無しさん
2008/04/25(金) 06:17:50これですわ
http://pc11.2ch.net/test/read.cgi/tech/1205059063/667
0069デフォルトの名無しさん
2008/04/25(金) 06:25:20template <template <class> class T>
これ、関数ポインタと同じ様な書式で
template <class T<class> >
と書くほうが自然な感じがするのは自分だけ?
0070デフォルトの名無しさん
2008/04/25(金) 06:49:43thx。
しかし色んな書き方できるんだなぁ・・・
0071デフォルトの名無しさん
2008/04/25(金) 08:27:11template<class T>
class A {
}
template<class T2>
class B {
}
A< B<型> > a;
ってなテンプレート型にテンプレート型を渡したときに、Aのスコープ内で
Bのテンプレート引数(T2の実体型)を知る方法って無いよね?
0072デフォルトの名無しさん
2008/04/25(金) 08:53:58class B {
typedef T2 hogeT2;
}
A< B<型> > a;
a::hogeT2 hoge;
で行けない?
0073デフォルトの名無しさん
2008/04/25(金) 09:02:14そんならT::T2でいけるかもしれないし、だめなら↑のtypedefで行けるはず
0074デフォルトの名無しさん
2008/04/25(金) 20:21:30T::T2 は無理。
typedef すればいけましたが、
A<B<x>> が A<C<x>> や A<D<x>> になった時に
対応が大変なので、
template<template<class> class TemplateT, class ParamT>
class Typenamedef {
typedef TemplateT T_TYPE;
typedef ParamT P_TYPE;
};
template<class T>
class A {
T::P_TYPE x ;
};
A< Typenamedef<B, 型> >
こういう形に落ち着きました。
0075デフォルトの名無しさん
2008/04/25(金) 20:43:200076デフォルトの名無しさん
2008/04/25(金) 21:07:18template<template<class> class TemplateT, class ParamT>
class A {
ParamT x;
}
でいいじゃんと思うのだが
0077デフォルトの名無しさん
2008/04/25(金) 21:37:51ありますし、今後増えるかもってことで。
>>76
Bにあたるクラスのテンプレート引数の数が変わった場合でも、
Aを書き換えずに対応できるようにする為に74の用に1クッション
入れたほうが良いかなと思ったのですよね。<Aも何種類かあるので
007877
2008/04/25(金) 21:50:44Aはboost ptr_containerの代替品で、ポインタを格納するコンテナ型を受け取ります。
BはSTLコンテナ、または自作コンテナ。
例えばvectorだとテンプレ引数にアロケータがあるので、
template<template<class, class> class T>と引数が2つになるが、
自作コンテナはアロケータまで取ってないので引数が1つだったりするし、
A内でアロケータまで知る必要もないので >74 で済むってな寸法です。
0079デフォルトの名無しさん
2008/04/25(金) 21:52:10いい方法無いですか?
0080デフォルトの名無しさん
2008/04/25(金) 21:57:46aout_ptr 又は shared_ptr で検索
0081デフォルトの名無しさん
2008/04/25(金) 21:58:290082デフォルトの名無しさん
2008/04/25(金) 22:01:510083デフォルトの名無しさん
2008/04/25(金) 22:02:13wstringで返すという手もある
0084デフォルトの名無しさん
2008/04/25(金) 22:21:350085デフォルトの名無しさん
2008/04/25(金) 22:50:10四則演算を駆使して16桁の2〜36進数までを10進数に直すプログラムって可能でしょうか?
0086デフォルトの名無しさん
2008/04/25(金) 22:55:58読み直してみろ
それで質問の答えが返ってくると思うか?
何がやりたいのかをきちんとまとめてから文章にしろ
あて主語がなにかはっきりしろ
0087デフォルトの名無しさん
2008/04/25(金) 22:58:43四則演算だけを用いて16桁のn進数を10進数に変換しろっていうだけだろ?
日頃やらないから、凄く面倒くさい手段しか思いつかん
0088デフォルトの名無しさん
2008/04/25(金) 23:07:450089デフォルトの名無しさん
2008/04/25(金) 23:16:20private static int toDecimal(string hex)
{
int n = 0x0;
switch (hex[0])
{
case '0':
n = 0x00;
break;
case '1':
n = 0x10;
break;
(省略されました・・全てを読むにはここを押してください)
⁻⁻⁻⁻⁻⁻
0090デフォルトの名無しさん
2008/04/25(金) 23:24:03配列のCharで取得して0番目なら15回基数をかけた奴と入力された値をかけt(ry
0091デフォルトの名無しさん
2008/04/25(金) 23:27:38うーん、やっぱり自作コンテナ内で
typedef T value_type;
したほうがいいと思うのは俺だけ?
0092デフォルトの名無しさん
2008/04/25(金) 23:36:38コンパイラがvoidを返すようなメッセージだします。受け取れません
009392
2008/04/25(金) 23:38:110094デフォルトの名無しさん
2008/04/25(金) 23:50:02class cls{ public: string a; int n; };
cls x=(cls)("aaa",5);
0095デフォルトの名無しさん
2008/04/26(土) 00:00:08strtolとかstrtoulとか。
宿題なんで使用禁止なら宿題スレ行け。
>>92
なるべく厳しい例外安全を達成するため、
stackの先頭を読み取るのはtopメンバ関数として、popから分離されている。
>>94
そういう構文が存在しないから。
cls x = {"aaa", 5};
0096デフォルトの名無しさん
2008/04/26(土) 01:36:33それ以前に、B<T>とTをそれぞれ引数として渡した方が
遥かに楽だったことにさっき気が付いたorz
0097デフォルトの名無しさん
2008/04/26(土) 01:54:11それってstd::vectorなど標準コンテナののテンプレート引数では、
Tと(デフォルト引数で)std::allocator<T>を渡すのと同じ感じだよね。
0098デフォルトの名無しさん
2008/04/26(土) 10:19:59配列と想像される可能性が高いのに
そんなもんを薦めるなよ
0099デフォルトの名無しさん
2008/04/26(土) 12:02:16宣言の前に"{"がないって怒られて通らないんですがどうしてでしょう・・orz
0100デフォルトの名無しさん
2008/04/26(土) 12:16:45見た事、やったことないです。
class Meibo{
public:
int GakuseiNo;
string Name;
Meibo() : GakuseiNo( -1 ), Name( "" ) {}
Meibo(int n, string name) : GakuseiNo( n ), Name( name ){}
bool operator<(const Meibo& a)const{ return GakuseiNo < a.GakuseiNo; }
};
0101デフォルトの名無しさん
2008/04/26(土) 12:22:31■ このスレッドは過去ログ倉庫に格納されています