スレを勃てるまでもないC/C++の質問はここで 4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/09/17(水) 15:41:48過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
0022デフォルトの名無しさん
2008/10/01(水) 20:36:02ビルドできないんですがどうすればいいのでしょうか?
応答なしになってしまいます・・・
0023デフォルトの名無しさん
2008/10/01(水) 21:00:180024デフォルトの名無しさん
2008/10/01(水) 21:18:32それか別の変換方法ってある?
元々はVC9でfstreamのパスに日本語があると開けないやつの対策用に変換がしたいわけで・・・
0025デフォルトの名無しさん
2008/10/01(水) 22:28:05setlocaleしないとまともに動かないぞ。
002624
2008/10/01(水) 22:39:410027デフォルトの名無しさん
2008/10/03(金) 12:32:57例の補足としては、c[0][0]にはa=1、b=2 c[0][1]にはa=5、b=3が入っているとしたら c[0][3]=c[0][0]+c[0][1]の計算した場合 c[0][3]はa=6、b=5になるようなことです
0028デフォルトの名無しさん
2008/10/03(金) 12:36:220029デフォルトの名無しさん
2008/10/03(金) 23:34:08根本的にやり方を変えないと出来ないんじゃないか?
0030デフォルトの名無しさん
2008/10/03(金) 23:40:21外部からの入力をメンバ関数で受け取って同じ関数内で再計算までやってしまえばいいんじゃないかね
もう解決してそうな気もするけどな・・・
0031デフォルトの名無しさん
2008/10/04(土) 01:12:09class Huga
{
public:
Huga( int i = 0 ){ printf("%d\n", i); }
~Huga(){}
};
int _tmain(int argc, _TCHAR* argv[])
{
//Huga *huga = new Huga(5); みたいな感じにしたい
Huga *huga = new Huga[10]; // ここでコンストラクタへ引数を渡したい。
delete[] huga;
return 0;
}
なにかよい知恵があればお授けください。
0032デフォルトの名無しさん
2008/10/04(土) 01:16:18仕様上無理です。
後からsetter()でもループして回しましょう。
0034デフォルトの名無しさん
2008/10/04(土) 20:27:50どなたか流れを教えてください。よろしくお願いします。
#include
int sub(int *x, int *y) {
(*x)++;
(*y)++;
return *x + *y;
}
main() {
int a = 0, b = 0;
b = sub(&a, &a);
printf(“%d %d\n”, a, b);
}
(1) 0 2
(2) 0 3
(3) 1 3
(4) 2 3
(5) 2 4
0035デフォルトの名無しさん
2008/10/04(土) 21:02:23これでOK?
int sub(int 0, int 0) {
0++; => 1
1++; => 2
return 2+2; => 4
}
0036デフォルトの名無しさん
2008/10/04(土) 21:46:29ご回答ありがとうございます。
1++; => 2 ←なぜここで1++になるのですか?*y=0ではないのですか?
return 2+2; => 4 ←これも、なぜ*x=2になるのですか?1ではないのですか?
よくわかりません。お手数ですが、お教え願います。
0037デフォルトの名無しさん
2008/10/04(土) 21:53:07長くてごめん。
>b = sub(&a, &a);
となってるからとしか言えないんだけど。
重要なのは0という数値じゃなくて0が入ったaのアドレスが渡されてるってこと。
xもyも指してる実体は同じaだから、xへの操作はyへの操作と同じだし同様にyへの操作もxへの操作となる。
だから実際は以下と同じようになってるってわけ。
int sub(int *x) {
(*x)++;
(*x)++;
return *x + *x;
}
0038デフォルトの名無しさん
2008/10/04(土) 22:24:01理解できました。ありがとうございました。
0039デフォルトの名無しさん
2008/10/05(日) 03:03:40#if sizeof(time_t) == 8
/* time_t が 64 bit のときの処理 */
#else
/* time_t が 32 bit のときの処理 */
#endif
みたいな書き方ってできなかったっけ?
0040デフォルトの名無しさん
2008/10/05(日) 09:41:190041デフォルトの名無しさん
2008/10/05(日) 21:06:33自分の場合、、、。
構造体を使わなかった場合は、
関数への引数が多くなってしまったり、
関数の戻り値を1つの型ですませることができなくなったりして
不便です。
なので、関数の引数や戻り値で大活躍です。
その他、いろいろ使っています。
共用体は自分の場合はあまり使わないです。
BYTE(unsigned char)型みたいに1byte単位での
入出力が必要な場合に、ある程度決まった型に変換が必要な
場合とかには使う場合があります。
と実務経験があまりない自分が言ってみるテスト。
0042デフォルトの名無しさん
2008/10/05(日) 21:36:12うんできない
0043デフォルトの名無しさん
2008/10/06(月) 09:36:06じゃあ>>39みたいなことしたい場合は、autoconfとかを使って、
コンパイル前にあらかじめsizeof(time_t) を調べておく必要があるってことですね。
うーん、今作ってるのは小さいプログラムだからあんまり大げさなことはしたくないなあ。
なんかいい方法があれば教えてください。
0044デフォルトの名無しさん
2008/10/06(月) 10:27:02プリプロセッサとsizeofとどっちの処理が先か考えりゃわかるべ。
0045デフォルトの名無しさん
2008/10/06(月) 10:54:53time_tが64bitの環境はまだ少ないんだし、その環境向けのifdef (OSと
かCPUとか)で分ければいいでない?
0046デフォルトの名無しさん
2008/10/06(月) 11:06:21} else {
}
じゃだめなのか?
#include <limits.h>
#if SIZE_MAX == 4294967295
#else
#endif
とか
0047デフォルトの名無しさん
2008/10/06(月) 11:11:470048デフォルトの名無しさん
2008/10/12(日) 14:55:45グローバルのポインタ変数にmallocし、領域を確保。
その後、他のローカル関数B内で、関数A内で確保した領域を使うことって
出来ましたっけ?
004948 補足説明
2008/10/12(日) 15:14:03#include <stdio.h>
#include <stdlib.h>
char *g_pcX;
int sub001(char *pcX)
{
pcX = (char*)malloc(256);
for(int i=0; i<256; i++)
{
pcX[i] = i;
}
return 0;
}
void main()
{
sub001(g_pcX);
for(int i=0; i<256; i++)
{
printf("%d ", g_pcX[i]);
}
}
0050デフォルトの名無しさん
2008/10/12(日) 17:41:40・そのサンプルではコンパイルできません。
・グローバル変数であるメリットが全くありません。
・そもそも関数内で確保した場所を誰にも伝えていないのに誰かが使えるわけがありません。
・ポインタと関数の引き数について勉強しなおすべきです。
>>48
できます。しかし、そうすべきではありません。
0051C言語始めました
2008/10/12(日) 18:51:19{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]=0.;
}
}
}
main(){
int n=4;
vector< vector<double> > a( n , n );
zero(// ????? //);
}
????
↑の部分はどのように宣言したらいいのでしょうか?
0052デフォルトの名無しさん
2008/10/12(日) 19:09:05向こうで教わったでしょ。
0053C言語始めました
2008/10/12(日) 19:12:59{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]=0.;
}
}
}
void main(){
int n=4;
vector< vector<double> > a( n , n );
zero(n, vector< vector<double> > & a);
}
さっぱりピーマンです…
0054デフォルトの名無しさん
2008/10/12(日) 19:27:30>>53
次のどれかを選択しろ。
・STLの勉強をする。
・C初心者スレ辺りでやりたいことから提示して初歩から教わる。
・PCを窓から投げ捨てる。
0055C言語始めました
2008/10/12(日) 19:35:24火曜日になれば教えてもらえるけど早く使い方知りたかったんで。
基礎とかは二の次で使えたらいいのでどうか教えてください。
0056デフォルトの名無しさん
2008/10/12(日) 20:58:43--
#include <vector>
void zero(std::vector<std::vector<double> > & a){for (unsigned i = 0; i < a.size(); ++i) for (unsigned j = 0; j < a.at(i).size(); ++j) a.at(i).at(j) = 0;}
int main(){const unsigned n = 4;std::vector<std::vector<double> > a(n, n);zero(a);return 0;}
0057C言語始めました
2008/10/12(日) 21:30:04ありがとうございます。
がんばって噛み砕きます。
0058デフォルトの名無しさん
2008/10/12(日) 23:07:57一応コンパイルは通りそうだが?
0059デフォルトの名無しさん
2008/10/12(日) 23:30:21あー確かにコンパイルは通るね。ダメダメなことに変わりはないけど。
0060デフォルトの名無しさん
2008/10/13(月) 00:02:270061デフォルトの名無しさん
2008/10/13(月) 22:44:34fatal error C1083: include ファイルを開けません。'iostream.h': No such file or directory
というエラーが出ます。
VC++2005EEをインストールしただけじゃだめなのでしょうか?
ソースは↓です。
#include <iostream.h>
int main()
{
cout << "テスト" ;
return 0;
}
0062デフォルトの名無しさん
2008/10/13(月) 22:53:03君は浦島太郎だ。今のC++に<iostream.h>は無くなった。
#include <iostream>
int main()
{
std::cout << "テスト" ;
return 0;
}
0063デフォルトの名無しさん
2008/10/13(月) 23:20:34正常に実行できました。
ありがとうございます。
参考にしていたサイトが古かったので、浦島太郎でした。
0064デフォルトの名無しさん
2008/10/14(火) 07:52:07[環境]VC++2005
TCHARで開くファイル名を指定して TEXT("\\Data\\foo.jpg") と
しているが、CreateFileでファイルを開くことができない。
以下、プロジェクトをhogeとしている場合のフォルダ構成。
hoge.sln
hoge.ncb
hoge.suo
+[debug]
+[hoge]----+[Data]---foo.jpg
+[Source]---main.cpp
その他ソースコード
※プロジェクトのプロパティ>C/C++>追加のインクルードディレクトリ
で、SourceフォルダとDataフォルダを追加している。
Dataフォルダの追加を行っているが、これはコンパイルするときに
読み込むもののみに有効?
※foo.jpgを[hoge]フォルダ直下においた場合は読み込める。
006564
2008/10/14(火) 07:58:48すんません、フォルダ構成記述ミスりました。
<最上位階層>
hoge.sln
hoge.ncb
hoge.suo
+[debug]
+[hoge]
<hoge階層>
+[Source]
+[Data]
hoge.rc
hoge.vcproj
hoge.ico
<Data階層>
foo.jpg //こいつを読み込みたい
<Source階層>
main.cppなどなどその他ソースコード
0066デフォルトの名無しさん
2008/10/14(火) 09:25:21本を読んでもUNIXの鯖がどーたら
で全然意味がわかりません。
鯖を共有メモリにするってことですか?
0067デフォルトの名無しさん
2008/10/14(火) 09:53:36釣りだろ!?
釣りだと言ってくれッ…!
0068デフォルトの名無しさん
2008/10/14(火) 10:41:33ネットワークプログラムなしにネットワークを使えると思っているのですか?
あなたか書き込んでいるここはいったい何だと思って・・・
0069デフォルトの名無しさん
2008/10/14(火) 15:29:420070デフォルトの名無しさん
2008/10/14(火) 22:58:0080点以上100点以内 A
65点以上80点未満 B
50点以上65点未満 C
0点以上50点未満 D
それ以外の整数に対しては「ありえない」と出す
0071デフォルトの名無しさん
2008/10/14(火) 23:13:51C/C++の宿題を片付けます 116代目
http://pc11.2ch.net/test/read.cgi/tech/1222813731/l50
0072デフォルトの名無しさん
2008/10/21(火) 09:35:45内容も変更しないという意味だったっけ?
たとえば
void Map_Class::second(std::map<std::string, int>& m) const {
のようなメンバ関数があったとすると
このメンバ関数の中では値を変更しちゃいけないんだっけ?
0073デフォルトの名無しさん
2008/10/21(火) 11:33:31いいえ、メンバ関数内でメンバ変数を変更できないだけです。
その例ではmを変更できてしまえます。
0074デフォルトの名無しさん
2008/10/21(火) 14:23:21では、何のための const なのでしょう?
0075デフォルトの名無しさん
2008/10/21(火) 14:33:49Map_Class自体がconstの場合のため。
std::map<std::string, int> m;
const Map_Class map_class;
map_class.second(m);
secondがconstでなければ呼べない。
map_classはconstのため変更不可だが、mはconstではないので変更可。
0076デフォルトの名無しさん
2008/10/21(火) 14:33:55だから、メンバー変数を変更しないという意味でconstでしょ。
0077デフォルトの名無しさん
2008/10/22(水) 21:04:59オブジェクト指向で汎用性を高くもたせるか迷ってます
構造体バリバリで書くと後のソースいじるときに大量のソースになり
保守するのが難しくなりやすいのと
オブジェクト指向で書くと汎用性を維持するためのコードで複雑になりやすく
これまた保守が難しくなりやすいかと考えています
どちらの手法で組んでいくか、また、別の手法があるかアドバイスいただけませんか?
0078デフォルトの名無しさん
2008/10/22(水) 21:09:150079デフォルトの名無しさん
2008/10/23(木) 07:52:12mapを変更したくないなら、
void Map_Class::second(const std::map<std::string, int>& m) const {
のようにmをconst参照にすればよい
すると、second内ではmのconstメンバー関数しか呼び出せなくなる。
0080デフォルトの名無しさん
2008/10/23(木) 07:52:50>>73 → >>74
0081デフォルトの名無しさん
2008/10/23(木) 13:51:51アイコンファイルってサイズ指定するとこないですよね?
Visual C++です。
0082デフォルトの名無しさん
2008/10/23(木) 13:53:21LoadImageならサイズも指定できるよ。
0083デフォルトの名無しさん
2008/10/23(木) 16:34:30下記のクラスの定義で、<RTC::TimedLong>の部分の意味が分かりません。
(山カッコの使い方が分からないです…)
よろしくお願いします。
class Multiply
: public RTC::OnWriteConvert<RTC::TimedLong>
{
:
:
};
0084デフォルトの名無しさん
2008/10/23(木) 16:47:000085デフォルトの名無しさん
2008/10/23(木) 16:55:20理解できました。
有難うございます。
0086デフォルトの名無しさん
2008/10/23(木) 17:07:020087デフォルトの名無しさん
2008/10/23(木) 18:51:43HICON ico;
ico = AfxGetApp()->LoadIcon(IDI_ICON1);
って感じで読み込んでます。
0088デフォルトの名無しさん
2008/10/23(木) 18:53:45例えば,
class Hoge
{
public:
int compute( int x, int y );
}
というクラスがあったとしたら,
xとyは,メンバ変数とするべきか否か,
その判別の基準って何かありますか?
0089デフォルトの名無しさん
2008/10/23(木) 18:56:56MFCなのね。つい最近似たような事例を書いた気がするが・・・
HICON ico;
ico = (HICON)::LoadImage(AfxGetInstanceHandle(), _T("test.bmp"), MAKEINTRESOURCE(IDI_ICON1), 16, 16, LR_LOADFROMFILE );
こんなんでどう?
つか、元のアイコンは16x16なの?
VSで編集時にイメージメニューから複数のサイズ、色数のアイコンが追加できるけど、それでやってる?
009089
2008/10/23(木) 18:57:32009189
2008/10/23(木) 18:58:210092デフォルトの名無しさん
2008/10/23(木) 22:01:38解決方法は見つけたのですが、
なぜ怒られるのか、わかりません。
理由が分かる方教えてください。
メンバ変数としてクラスを宣言して、
そのクラス名と同じ名前の関数を定義すると怒られます・・・。
----------------------
class Hoge {
};
class Niko {
public:
Niko();
~Niko();
void Hoge();
Hoge hoge; // NG
};
↓↓↓↓↓
class Niko {
public:
Niko();
~Niko();
Hoge hoge; // 何故か入れ替えるとOK
void Hoge(); // もしくは ::Hoge hoge; とすることでもOK
// または Hoge2()など、別名にすることでもOK
};
Hoge()はNikoのメンバ関数のつもりですが、
Hogeクラスのコンストラクタとして解釈されている???
0093デフォルトの名無しさん
2008/10/23(木) 22:24:15上では、Niko内でHogeという名前を使うと、
最も内側にあるvoid Hoge();に解決され、それは形名でないのでエラー。
もっとも、そういう風にメンバの順番を替えるだけでエラーになったりならなかったりしては
混乱間違いなしということで、下のコードも本来はエラーになる。
(Hoge hoge;で外側のHogeを使っておきながら、後からメンバ名にHogeを持ち込んだという罪状)
::Hoge hoge;と外側の名前を使うことを明示するか、Hoge2などと別の名前にするのが正しい。
その場合hogeとHoge()のどっちを先に書いてもいい。
009492
2008/10/23(木) 23:35:14なるほど・・・名前解決ができないのですね。
以下のメンバの再定義によるエラーと同じと解釈しました。
---------------
class Fuga {
public:
int ABC;
void ABC(); // エラー
};
---------------
ちなみにおっしゃるとおり、gccでコンパイルしたら、入れ替え技も怒られました。
(グローバルスコープおよび、別名にするのはOKでした。)
コンパイラの警告文が違ったので、嵌ってしまいました・・・。
ありがとうございます。
0095デフォルトの名無しさん
2008/10/25(土) 12:42:40ちょっと忘れてしまったので聞きたいのです
srand( ??? );
の ??? の部分って時間を指定するハズだったのですが
何の関数でしたっけ?
0096デフォルトの名無しさん
2008/10/25(土) 12:45:020097デフォルトの名無しさん
2008/10/25(土) 12:46:03009895
2008/10/25(土) 12:47:17ありがとうございました
0099デフォルトの名無しさん
2008/10/25(土) 19:05:20http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/GaussJ.htm
と書いてありますが手元の資料では三角行列を作ってから後退代入で求めると書いてあります
サイトのほうが考えやすいんですがなぜこのようにやるのかおしえてください
やはり速度でしょうか?お願いします
0100デフォルトの名無しさん
2008/10/25(土) 19:40:10そこで関数や変数の命名規則を決めたいのですが、
実務経験がないため、まったく分かりません
参考になるようなサイトでもないでしょうか?
0101デフォルトの名無しさん
2008/10/25(土) 21:24:4500000
00001
...
44443
44444
って表示するプログラム書いたんだけど、
そもそもSTLにある?
あと、これ何て言う並び方だっけ?
0102デフォルトの名無しさん
2008/10/25(土) 21:28:45cc -c -I../header ../src/hoge1.c
cc -c -I../header ../src/hoge2.c
cc -c -I../header ../src/hoge3.c
ar -r lib.a hoge1.o hoge2.o hoge3.o
ranlib lib.a
と同等のことを Makefile ではどうやってかけば良いのでしょう?
0103デフォルトの名無しさん
2008/10/25(土) 21:31:37何故先人の知恵を利用しないのか。
http://www.google.co.jp/search?q=%96%BD%96%BC%8BK%91%A5
0104デフォルトの名無しさん
2008/10/25(土) 21:32:37アルゴリズムによる
0105デフォルトの名無しさん
2008/10/25(土) 21:41:52void main()
{
for( int i=0; i<10; i++ )
printf( "%d\n", i );
for( int i=0; i<10; i++ )
printf( "%d\n", i );
}
これって VC++6 だとコンパイルエラーなんだけど
最新のはOKなのですか?
0106デフォルトの名無しさん
2008/10/25(土) 22:04:41OKだよ。
そしてVC6のおまじない。
#define for if (0) ; else for
0107デフォルトの名無しさん
2008/10/25(土) 22:09:21重複順列だな。
探したことあるけど、STLにはないから自分で作るしかない。
重複しない順列なら next_permutation があるんだけど。
0108101
2008/10/25(土) 22:48:09thx !
0109デフォルトの名無しさん
2008/10/26(日) 00:37:12それって何してるの?
0110デフォルトの名無しさん
2008/10/26(日) 00:41:090111デフォルトの名無しさん
2008/10/26(日) 00:42:09>>105のようなコードがVC6でも通るようになる。
原理はifの真側とelse側でそれぞれスコープが作られることの利用。
もちろん規格準拠な処理系では無害。
0112デフォルトの名無しさん
2008/10/26(日) 01:17:18s = fgets(linebuffer, BUFFERSIZE, inputfile);
if (s == NULL) {
break;
}
こんな記述があったのですが、コレって大丈夫なんですか?
fgets()って、文字列の先頭ポインタを返すので、sには入ると思うのですが、
fgets()が取り出した文字列自体はどこにあるのですかね??
0113デフォルトの名無しさん
2008/10/26(日) 01:27:28> gets() and fgets() return s on success, and NULL on error or when end of file occurs while no characters have been read.
標準ライブラリの関数はとりあえずmanを嫁。
linebufferのアドレスを先頭アドレスとしたBUFFERSIZE分の長さの配列があると仮定して書き込む。
んで、returnで成功したかどうか判別している。
0114デフォルトの名無しさん
2008/10/26(日) 11:46:42int i;
void main()
{
int j;
printf( "%d\n", i );
printf( "%d\n", j );
}
この結果が
0
-85899346
になるのですが
グローバル変数 int i は初期化しなくても 0 になるということは
保証されているのでしょうか?
0115デフォルトの名無しさん
2008/10/26(日) 12:20:25ええ、保証されます。
0116デフォルトの名無しさん
2008/10/26(日) 14:26:35ありがとうございます
0117デフォルトの名無しさん
2008/10/26(日) 14:29:16ありがとうございます!
0118デフォルトの名無しさん
2008/10/26(日) 17:36:11ありがとうございます
0119デフォルトの名無しさん
2008/10/26(日) 17:48:56ありがとうございます
0120デフォルトの名無しさん
2008/10/26(日) 19:02:49いえいえ、どういたしまして。
0121デフォルトの名無しさん
2008/10/26(日) 19:55:47なるほど、スコープを作ってやるワケか。
そしてVC6ってforの初期化部でスコープ作らないのか…ガクブル
0122デフォルトの名無しさん
2008/10/26(日) 20:27:542003でもデフォルトは同じ。オプションでかえられるけど。
■ このスレッドは過去ログ倉庫に格納されています