はきだめC/C++下級者 ..
656:デフォルトの名無しさん
08/03/24 11:26:37
>>653
クラスにすることお勧め。
657:デフォルトの名無しさん
08/03/24 13:36:42
どうしてエラーをコピペしないのか。俺らをエスパーだと思ってるのか。
>>655
ソースも見ないで間違ってるかどうか判断できるわけがない。
ソース(その変数に関係するところ)とエラー(いっぱい出てたら始めの3個くらい)を張って。
改めて打つんじゃなくてコピペで。
>hage.h,hoge.hでexturn宣言したらエラーが出るのですが、
externの綴りが間違ってる。ここに書く時に間違えただけならいいんだけど。
658:デフォルトの名無しさん
08/03/24 20:57:56
エスパーしてもらいたいんじゃなくて
原因である可能性の高いものを列挙してもらいたいんじゃない?
んで、それを一通り試して、自己解決しました!って言うの(笑)
659:デフォルトの名無しさん
08/03/25 02:29:45
>>655
やりかたがまちがっている。
.h ファイルはコンパイルする必要はないよ。
660:デフォルトの名無しさん
08/03/25 03:10:31
>>653
[main.cpp]
#include <stdio.h>
void hoge_inc(void);
void hage_inc(void);
int count;
int main(int argc, char *argv[]) {
count = 0;
hoge_inc();
printf("count = %d\n", count);
hage_inc();
printf("count = %d\n", count);
return 0;
}
[hoge.cpp]
extern int count;
void hoge_inc(void) {
count++;
}
[hage.cpp]
extern int count;
void hage_inc(void) {
count++;
}
661:デフォルトの名無しさん
08/03/25 11:28:05
スレの内容見ながら直したら解決できました。
出てたエラーは
error LNK2001: 外部シンボル ""int mov_i" (?mov_i@@3HA)" は未解決です。
でファイルの依存関係が間違っていたのが原因でした。
>>656-660
有難うございました。
>>657
申し訳ないです・・・以後気をつけます
662:デフォルトの名無しさん
08/03/26 04:03:10
Windows 限定の話題で申し訳ないんですが、FARPROC 型というのが何なのかよくわからないので質問させてください。
MSDN の CallWindowProc の項目を見ると、FARPROC 型は
typedef int (FAR WINAPI *FARPROC)();
と宣言されているらしいんですが、WINAPI は __stdcall だから良いとして、FAR というのは何なんでしょうか?
MinGW だと FAR は省略されてるので、付けても付けなくても同じな気がするんですが、
とすると FARPROC=ただの関数ポインタと考えちゃって構わないんですか?
663:デフォルトの名無しさん
08/03/26 04:04:56
16bitアドレッシング時代の残骸だろ。無視して医院で内科医。
664:デフォルトの名無しさん
08/03/26 04:09:15
>>663
ありがとうございます。なんかMS-DOS時代はFARとかNEARとか使ってたらしいのでそういうことなんですかね。
Windows だとこういうマクロとか typedef がやたらと多くて変な所でやたら苦労させられます(;´Д`)
665:デフォルトの名無しさん
08/03/26 11:29:57
どこかに#define FARと定義されているから、
プリプロセスが終われば消えてなくなる。
666:デフォルトの名無しさん
08/03/26 19:20:32
いい時代になったもんだ。
667:デフォルトの名無しさん
08/04/01 23:30:29
コンストラクタを定義しようと思っているのですが
ClassA();
ClassA(int nSize);
と定義して、実体を書く時に
ClassA::ClassA(){
this->ClassA(1);
}
と言う具合に書きたいんですが
error C2273: '関数形式のキャスト' : '->' 演算子の右側で使用できません。
となって出来ません。
何とか、良い方法はありませんでしょうか?
ClassA(int nSize=1);
もあるとは思うのですが、指定した場合、もう少し細かくコードを書きたいのです。
668:デフォルトの名無しさん
08/04/01 23:35:07
ほかのコンストラクタを呼ぶことは今のところ不可能だから、
privateな初期化関数を作ってそれを呼ぶのが常套手段。
669:デフォルトの名無しさん
08/04/08 18:49:12
nanosleepの使用例はどこかにありませんか?
670:デフォルトの名無しさん
08/04/08 22:20:53
>>669
ありますが、何か。
671:デフォルトの名無しさん
08/04/08 22:24:11
nanosleepの使用例なんて腐るほどあるわよ。ネットは広大ね。
って少佐が言ってた
672:デフォルトの名無しさん
08/04/08 22:28:06
あんなの、man引けば使い方なんて一発だろうに。
673:デフォルトの名無しさん
08/04/09 04:07:45
うちのman nanosleepには使用例は載っていないな〜〜
674:デフォルトの名無しさん
08/04/09 06:39:06
手取り足取り教えて貰わないと書けないんですか?
675:デフォルトの名無しさん
08/04/09 07:04:28
つ URLリンク(www.google.co.jp)
676:デフォルトの名無しさん
08/04/09 08:05:20
Visual C++でnanosleepに当たるものを教えてください
677:デフォルトの名無しさん
08/04/09 08:59:32
Sleep()
指定する時間単位と精度の違いに注意。
678:デフォルトの名無しさん
08/04/09 13:21:59
質問。
URLリンク(www.be-interactive.org)
にあるアクションスクリプトをC++で書き直してみたいんだけど、
辞書データのクラス化と初期化をどうやったらいいのか
分からなくて困ってます。
typedef struct { int x,y; } POINT;
class Stroke { vector<POINT> points; };
class DictItem { vector<Stroke> strokes; };
class Dictionary { vector<DictItem> items; };
と定義してはみたものの、どうデータを流し込んで
やればいいんでしょうか?
もしくはもっと効率的なクラス定義の方法があれば
教えてください。
679:デフォルトの名無しさん
08/04/09 21:09:12
std::map使えばいいんじゃね
680:デフォルトの名無しさん
08/04/10 17:44:25
ダイナミックライブラリとスタティックライブラリの使い分けについて教えてください
681:デフォルトの名無しさん
08/04/10 21:40:05
>>680
C/C++の質問ではありませんのでスレ違いです。
682:デフォルトの名無しさん
08/04/16 02:44:04
ポインタで複数の配列の連続的に扱うことはできますか?
int *p
int A[3] , B[3], C[3];
(p+0) = A;
(p+3) = B;
(p+6) = C;
683:デフォルトの名無しさん
08/04/16 02:47:57
できません
684:デフォルトの名無しさん
08/04/16 13:52:33
そういうコンテナ/イテレータを書くのも勉強になりそうではあるな
685:デフォルトの名無しさん
08/04/17 02:20:38
>>682
unionで配列の位置を一纏めに固定すれば可能
686:回答者も下級なのか、このスレは
08/04/17 08:15:36
>>685
ほほぉ、unionでですか。具体例をどうぞ。
687:デフォルトの名無しさん
08/04/18 00:02:31
VisualC++2008でfopen_sやfopenしてもファイルを読み込んでくれません。
パスはあってるし、DOS窓で実行ファイルと読み込みたいファイルのあるディレクトリに移動してから実行してもダメでした。
fopen_s(&fp, "a.txt","r")
fp=fopen("a.txt","r")
という書き方で間違ってないと思うのですが…
原因としてはどんなことが考えられるんでしょうか?
688:デフォルトの名無しさん
08/04/18 00:31:47
もしかして:
a.txt.txt
689:デフォルトの名無しさん
08/04/18 22:58:27
もしかして:
VisualC++2008 【Express Edition】
690:デフォルトの名無しさん
08/04/19 00:02:10
>>682
int p[9];
int* A=p+0, *B=p+3, *C=p+6;
A[0]=(以下略
じゃだめなん?
691:デフォルトの名無しさん
08/04/19 00:25:14
>>689
そうです
692:デフォルトの名無しさん
08/04/20 02:54:00
>>686
union {
struct {
int A[3],B[3],C[3];
};
int D[9];
} Array;
int *p = &( Array.A[0] );
こんな風に
693:デフォルトの名無しさん
08/04/22 11:59:19
intじゃなかったら使えないな
694:デフォルトの名無しさん
08/04/22 17:51:28
10進数を2進数に変換する方法教えてください
695:デフォルトの名無しさん
08/04/22 17:57:29
2で割って少数以下切捨て、その時の余りをならべる。を繰り返す。
696:デフォルトの名無しさん
08/04/22 18:16:54
以下を実行して
a:0x8049e80 0x8049e80 0x8049e80
A:0x8049e80 0x8049e80 0x8049e80
11 12 13
4 5 6
0 0 0
のようになることを期待していますが11 12 13が1 2 3のままです。どのようにしたらよいか教えていただけると幸いです。
struct data{
double x[3],p[3],q,rm;
};
class Func{
public:
void func1(struct data []);
};
class SubFunc{
public:
void subfunc1(struct data []);
};
続く
697:デフォルトの名無しさん
08/04/22 18:17:29
続きです
int main(void)
{
static data P[3];
Func FC;
FC.func1(P);
for(int i=0;i<3;i++){
cout << P[i].x[0] <<" "<< P[i].x[1] <<" "<< P[i].x[2] << endl;
}
return 0;
}
void Func::func1(struct data A[]){
SubFunc SFC;
SFC.subfunc1(A);
A[0].x[0]=1.0;
A[0].x[1]=2.0;
A[0].x[2]=3.0;
cout <<"A:"<< &A[0].x[0] <<" "<< &A[0].x[0] <<" "<< &A[0].x[0] << endl;
}
void SubFunc::subfunc1(struct data a[]){
a[0].x[0]=11.0;
a[0].x[1]=12.0;
a[0].x[2]=13.0;
cout <<"a:"<< &a[0].x[0] <<" "<< &a[0].x[0] <<" "<< &a[0].x[0] << endl;
a[1].x[0]=4.0;
a[1].x[1]=5.0;
a[1].x[2]=6.0;
}
698:デフォルトの名無しさん
08/04/22 18:27:36
char a[] = "100";
って書くと これどういう意味になるの?
699:デフォルトの名無しさん
08/04/22 18:29:01
>>698
a[0]='1' a[1]='0' a[2]='0' a[3]='\0'
700:デフォルトの名無しさん
08/04/22 18:34:43
>>699
さんきゅ!
701:デフォルトの名無しさん
08/04/22 18:36:19
>>696
SFC.subfunc1(A);
A[0].x[0]=1.0;
A[0].x[1]=2.0;
A[0].x[2]=3.0;
SFC.subfunc1()呼んで11 12 13入れても、その後上書きしてるじゃん
702:デフォルトの名無しさん
08/04/22 18:55:07
>>701
おっしゃるとおりです。ありがとうございました。
703:デフォルトの名無しさん
08/04/23 01:03:54
コンパイラとリンカのバージョンってどうやって調べるか分かりますか?
ちなみに、使っている環境(って言うのかな?)はCPad for Borland C++Compilerってやつです
あんまり難しい専門用語は分からないんで、初級者でもわかるように教えてくれるとうれしいです
704:デフォルトの名無しさん
08/04/23 01:07:11
無料版の BCC のバージョンは 5.5 しか存在しない。
705:デフォルトの名無しさん
08/04/23 01:34:27
>>704
それはリンカのこと?それともコンパイラのことですか?
超下級者だから全然わからん
706:デフォルトの名無しさん
08/04/23 01:35:44
ちっとも保守される様子がないbccなんかそろそろやめて
mingwやvcのexpress editionにすればいいのに。
707:デフォルトの名無しさん
08/04/23 01:39:43
-v
708:デフォルトの名無しさん
08/04/23 02:19:31
>>704
修正版の5.5.1がある。
709:デフォルトの名無しさん
08/04/24 10:33:03
>>694-695
整数は割っても少数にならないし、小数は扱いにくいから
↓のを繰り返す。
x % 2 //2進数の一桁目がこれででる。
x /= 2 //一桁目を取り出したらずらす。
710:デフォルトの名無しさん
08/04/24 10:47:35
x & 1
x =>> 1
711:デフォルトの名無しさん
08/04/24 15:42:59
1, 2, 4, 8, 16, 32, ... とビット数の数だけ論理和とればいいだけじゃん
712:デフォルトの名無しさん
08/04/24 15:57:14
ごめん。
>>709はマイナスのとき使えな・・くもないか。
713:デフォルトの名無しさん
08/04/24 21:56:29
まず10進数の定義からだな。
714:デフォルトの名無しさん
08/04/24 23:44:04
定義厨もここまできたか
715:デフォルトの名無しさん
08/04/25 09:16:09
パックドBCDかもしれんし、ASCZかもしれん。
716:デフォルトの名無しさん
08/05/06 17:33:03
#include <stdio.h>
struct histgram{
int x;
int y[100];
};
void one(struct histgram *hist);
void two(struct histgram *hist);
int main (void){
struct histgram hist[1] ;
int z;
hist->x = 0;
for(z=0;z<100;z++){
hist->y[z]=0;
}
printf("before***%d***%d***%d***",hist->x,hist->y[0],hist->y[50]);
one(hist);
printf("before***%s***%s***%s***",hist->x,hist->y[0],hist->y[50]);
for(z=0;z<9999999999;z++);
return 0;
}
void one(struct histgram *hist)
{
two(hist);
}
void two(struct histgram *hist)
{
int z;
hist->x = 1;
for(z=0;z<100;z++){
hist->y[z]=1;}}
これで実行するとメモリのエラーが出るんですが、どうすれば解決するでしょうか
717:デフォルトの名無しさん
08/05/06 17:50:14
>>716
2つめのprintfは、%sじゃなくて%dを使うべし。
718:デフォルトの名無しさん
08/05/06 19:50:09
×for(z=0;z<9999999999;z++);
○getchar();
719:デフォルトの名無しさん
08/05/08 06:03:23
それ以前に hist->x は hist[0].x じゃないのか?
720:デフォルトの名無しさん
08/05/08 06:44:04
どっちでもいいんじゃね?
721:デフォルトの名無しさん
08/05/11 01:10:46
ボーランドでコンパイルしたのですが、
E2293 linearEq5.c 4:)が必要
って出ます。
#include<stdio.h>
#include<math.h>
#define MAX_DATA 1000//データ点まで想定
void read_data(double x[],double y[],int &order ,int &data_number)// データファイルの読み込み
{
FILE* ifp;
char ifile[20];
printf("Input the file name of input data:");
scanf("%s",ifile);
printf("何次近似にしますか?:");
fscanf(ifp,"%d",&order);
printf("Input a data number:");
fscanf(ifp,"%d",&data_number);
if((ifp=fopen(ifile,"rt"))==NULL){
fprintf("Can't open input file \"%s\"\n",ifile);
}
途中までです。
一様、visualではこのエラー表示は出ません。
どうしたらいいか教えてください。
722:デフォルトの名無しさん
08/05/11 01:22:34
>>721
Cには参照はありません。visualとやらでエラーが出なかったとすれば、C++としてコンパイルしたのでしょう。
723:デフォルトの名無しさん
08/05/11 03:47:57
>>722
参照って何ですか?
724:デフォルトの名無しさん
08/05/11 09:34:34
>>723
int &
725:デフォルトの名無しさん
08/05/11 12:32:59
>>724
ありがとうございます
726:デフォルトの名無しさん
08/05/15 15:59:47
”プロセスにマッピングされている”というのは具体的には
ヘッダのインポートセクションとかにアドレスが格納されている、という意味ですか?
727:デフォルトの名無しさん
08/05/15 16:06:35
いいえ。
728:デフォルトの名無しさん
08/05/15 17:09:06
ではどういう意味ですか?
729:デフォルトの名無しさん
08/05/15 17:17:01
そのキーワードで検索すれば判る通り、状況によって意味することが違うので単純には答えられません。
730:デフォルトの名無しさん
08/05/16 01:25:27
>>726
タグ打ってくれなきゃ元レスがわかんね
731:デフォルトの名無しさん
08/05/20 01:15:18
c/c++ランタイムってもしかして
c/c++じゃなくてもプロセス起動時にロードされてる?
732:デフォルトの名無しさん
08/05/20 10:18:50
そのプロセスのコードの一部がC/C++で書かれてるならロードされる場合もある。
.dllや.soなら他のプロセスが呼び出してるかもしれん。
733:デフォルトの名無しさん
08/05/23 13:26:56
環境:vc2007
言語:c++
argcに間違ったパスを入れてしまいました。
そのあと何度動かしても、動かした瞬間にargcに間違ったパスが入り
プログラム'******'を開始できません。指定したファイルがみつかりません
というエラーが出ます。
どうやったら、このエラーは出なくなるでしょうか
734:デフォルトの名無しさん
08/05/23 14:13:51
>>733
argcはコマンドライン引数の数。パスなど入らない。
プロジェクトのプロパティのデバッグの動作のコマンドに間違ったものが入ってるとそうなる。
735:デフォルトの名無しさん
08/05/23 14:53:16
>>733
argv にも入れてみるとか……
736:デフォルトの名無しさん
08/05/24 07:33:05
>>733
プロジェクトのデバッグのタブの引数の項と間違えて、実行するプログラムのパスを書き換えたんじゃないのか?とか言ってみる。
737:733
08/05/25 11:26:10
解決しました。ありがとうございます。
738:デフォルトの名無しさん
08/05/25 19:04:50
Visual Studio 2008 Express で VC++の勉強をはじめたばかりの超初心者です。
gcnewを用いてインスタンスを生成し、"->"を使用してメンバ関数を呼び出すと、メンバ関数からメンバ変数をアクセスできません。
ご回答のほど、よろしくお願いします。
739:デフォルトの名無しさん
08/05/25 22:46:16
ref class A
740:738
08/05/25 23:42:33
>>739
ref にしてるんですが、ref じゃだめってことですか?!
741:デフォルトの名無しさん
08/05/26 00:28:28
C++/CLIではじめるならC++かC#のどちらかで始めたほうが楽じゃないかな。
742:デフォルトの名無しさん
08/05/27 23:28:52
>>738
それだけじゃなんとも答えようがない。ここだとスレ違い気味だし、
コードを付けてこっちで聞きなおしてみたらいい。
C++/CLI part3
スレリンク(tech板)l50
743:デフォルトの名無しさん
08/05/29 15:58:07
C/C++言語でプログラムを書いたら、
必ずC/C++ランタイムは使われていますか?
C/C++以外の言語で、C/C++ランタイムを使用している言語はありますか?
744:デフォルトの名無しさん
08/05/29 17:49:30
まったく使わないこともできるな。
745:743
08/05/29 20:36:21
C/C++で書いたプログラムはmain関数の前に
C/C++ランタイムのスタートアップルーチンが呼ばれるそうですが、
まったく使わない事も出来る、とはつまり
main関数の前にスタートアップルーチンを呼ばない事が出来るということでしょうか?
746:デフォルトの名無しさん
08/05/29 21:47:15
空の同名のスタートアップルーチンを自作してリンクすればできるだろ
747:デフォルトの名無しさん
08/05/29 22:32:17
>>745
フリースタンディング環境とか
748:デフォルトの名無しさん
08/05/29 22:51:56
>>745
書ける。組み込みなんか自分で書いたりするゾ
749:デフォルトの名無しさん
08/06/05 00:18:16
ファイルからN(定数)個のスペースで区切られた値を読み込むのに
while(fgets(str,512,fp)){
sscanf(str, "%d %d %d …, %d",
&input[0][ct], &input[1][ct], &input[2][ct], …, &input[N][ct]);
ct++;
}
とやっているのですが、Nを変数にしたい場合、どういう風にすればいいんでしょうか?
750:デフォルトの名無しさん
08/06/05 14:46:39
>>749
C++ なら問題ない。
751:デフォルトの名無しさん
08/06/06 01:24:08
難しいね、C++って、、、、
752:デフォルトの名無しさん
08/06/06 17:22:05
vector t;
をモジュールに引数として渡す方法を教えてください。もう3年も悩んでます。
753:デフォルトの名無しさん
08/06/06 18:57:23
>>749
C++ならvectorでできる。C99なら可変長配列でそのままできる。C89だとmalloc()で確保するしかない。
入力自体は、いずれにしてもループで回すしかない。
754:デフォルトの名無しさん
08/06/06 18:58:00
>>752
何をしたくて、3年間も何を無駄に調べたのか教えてください。
755:デフォルトの名無しさん
08/06/07 00:22:29
>>752
多分調べればわかると思う。
756:デフォルトの名無しさん
08/06/07 23:03:18
なんで .cpp と .h に分けるの?
h に全部書いちゃいけないの?
(javaって1ファイルだよね?)
757:デフォルトの名無しさん
08/06/07 23:08:17
コンパイル激遅でいいならやればw
758:デフォルトの名無しさん
08/06/07 23:23:32
URLリンク(kansai2channeler.hp.infoseek.co.jp)
データ対の大小比較を行った回数を計算し出力するプログラムなのですが
while(1){
count++
while(d[++i]<key)
count++;
count++
while(d[--j]>key
count++;
この部分は
これで合ってるのでしょうか?
759:デフォルトの名無しさん
08/06/08 00:35:08
>>757
遅くなるの?
それは知らなかった。
Boostってhppだよね?
あれ、遅いのに採用してるの?
760:デフォルトの名無しさん
08/06/08 00:38:27
>>759
インクルードってどういうものか分かってる?
ファイルの中身を合成するものなんだよ?
全てのコードをヘッダファイルに書いて
main のある .cpp でそれを全部インクルードしたとすると、
それら全てのファイルの中身を合成したファイルを
毎回コンパイルすることになるんだぜ。
そのファイルの中の1カ所を変更しただけでな。
761:デフォルトの名無しさん
08/06/08 00:40:13
>>759
boost 全部を一気に使う訳じゃないだろ。
まあ、boost 使うとそれなりにコンパイル遅くなるけど。
そのためのプリコンパイル済みヘッダファイルだな。
762:デフォルトの名無しさん
08/06/08 00:42:53
>>760
ただの宣言をするものと思ってた。
>>761
確かに、一気には使わないね。
ありがとう。
763:デフォルトの名無しさん
08/06/08 00:44:28
質問です。
if(整数型) ってやったときに
数字が0だと偽、符号が正だと真と聞いたのですが
ゼロ以下だとどっちになりますか?
764:デフォルトの名無しさん
08/06/08 00:45:25
>>759
Boostの場合はテンプレート使っていてヘッダに書かざるを得ないという事情がある。
もちろん、ライブラリのリンクという面倒事を回避できるという点も影響を及ぼしているとは思う。
要LIBのものでも必要最低限しかLIBに入れていない。
765:デフォルトの名無しさん
08/06/08 01:02:37
>>763
その説明はおかしい
0が偽で0以外が真
っていうかif(-1)とでもやって試せばどうかね
766:デフォルトの名無しさん
08/06/08 01:54:36
自分で試してあやふやな結果を得るくらいならここで質問して確実な回答を求めます。
767:デフォルトの名無しさん
08/06/08 02:02:47
規格票をおよみください
768:デフォルトの名無しさん
08/06/08 02:06:57
規格以前の問題。
まともな C++ の本読め。
769:デフォルトの名無しさん
08/06/08 06:58:45
まともなC++の本かどうかを判断するには知識が・・・
770:デフォルトの名無しさん
08/06/08 08:51:07
卵が先か鶏が先か。
771:デフォルトの名無しさん
08/06/08 08:57:06
代理出産だー
772:デフォルトの名無しさん
08/06/08 11:56:17
本ならここで聞け
スレリンク(tech板)
773:デフォルトの名無しさん
08/06/08 14:08:28
ここでの回答なら確実だと思ってるのかな。
774:デフォルトの名無しさん
08/06/08 14:09:44
if(-1) (-1に限らず負の数)くらいを試せないのはちょっとしんどいな。
いくらでも試す方法はあるだろうに・・・
775:デフォルトの名無しさん
08/06/09 02:57:06
C++だと環境に依存するコードが多くてバグるからCで書け
といわれたんですがC++特有で環境に著しく依存する物って何でしょう
仮想関数や継承の挙動が大きく変わるとは考えにくいんですが。
776:デフォルトの名無しさん
08/06/09 09:40:29
>>775
言ったやつに聞いてくれよ。
777:デフォルトの名無しさん
08/06/09 11:43:49
>>776
いったやつが理由を知らないんだよ。
知ったかぶりだよ。
778:デフォルトの名無しさん
08/06/09 12:31:53
>>775
例外処理とか、標準ライブラリの実装とか、の話かな?
いずれにしても挙動が変わることはさすがにないでしょ。
もちろん規格に沿った範囲内の話で、未定義動作を利用した
コードなんかについては知ったこっちゃ無いけど。
779:デフォルトの名無しさん
08/06/09 13:07:23
ども。やはりそんなものですよね…
上司が自信満々に断言するので突込んで聞けなかったんです
780:デフォルトの名無しさん
08/06/09 16:17:23
vector<Hoge>::const_iterator iter = hoge.begin();
(*iter).name
で、なんでアスタリスクが必要なの?
781:デフォルトの名無しさん
08/06/09 16:41:34
iter は const_iterator であって Hoge ではないから
iter.name という表記は const_iterator のメンバ name を参照しようとしているのであって、Hoge の name を見ているのではない
iter->name ならおk
782:デフォルトの名無しさん
08/06/09 16:48:02
>>781
ポインタと同じように考えればいいのなか?
783:デフォルトの名無しさん
08/06/09 17:36:46
>>782
うん
784:デフォルトの名無しさん
08/06/09 18:27:12
>>783
アリガd
785:デフォルトの名無しさん
08/06/09 18:37:41
イテレータはポインタを模したクラスのことだからな。
786:デフォルトの名無しさん
08/06/09 22:20:01
いい野中
787:デフォルトの名無しさん
08/06/09 23:16:16
配列の要素に-1を指定した時の挙動について教えてください
char a;
char b[10];
と宣言しておいて、b[-1]を指定したら、aを意味していることになりますか?
788:デフォルトの名無しさん
08/06/09 23:17:31
なるはずがありません
789:デフォルトの名無しさん
08/06/09 23:17:37
>>787
なりません。未定義動作になります。
790:787
08/06/09 23:26:09
FreeType2という、フォントレンダラのソースを読んでいたら
配列の添字に-1を指定している箇所があり、気になって質問しました
このソフトはC言語で書かれています。
やはりこれはイレギュラーな使い方なんですね
791:デフォルトの名無しさん
08/06/09 23:36:26
ほんとに配列として宣言されてた?
mallocで確保したアドレスに+1したものを配列として使ってたりしない?
792:デフォルトの名無しさん
08/06/10 02:07:48
メンバ変数の場合は宣言順にメモリに置かれることが保証されてるので、
あとはアラインメントに関して処理系独自の定義が行われていれば
その処理系では保証されるね。
793:デフォルトの名無しさん
08/06/10 02:34:15
>>792
されません。配列の添え字演算(ポインタ演算)で配列の範囲外にアクセスしたら未定義動作です。
794:デフォルトの名無しさん
08/06/10 02:43:51
未定義動作を発生させるコードについて、ある処理系が特定の挙動を保証することがあっても構わない。
795:デフォルトの名無しさん
08/06/10 04:40:52
[-1]だけではそれが間違ってるとは言い切れない。
char a[10], *p
p = a + 1;
とすれば
p[-1] == a[0]
であり、そこにアクセスするのは何の問題もない。
796:デフォルトの名無しさん
08/06/10 07:05:10
enumは変数宣言出来るけど
enum変数自体 int型で特に特別な変数ではないし
他の変数で代用可能だから活用法が思いつかない
どういった活用法があるのですか?
797:デフォルトの名無しさん
08/06/10 07:25:06
たしかに定数宣言+typedef程度の意味しかないけど、
C++なら多重定義できるのが便利と言えば便利、特にストリーム入出力。
これも主にC++のことだけど、クラス内で定数宣言するのにも使った。
static constのおかげでこの用途からは退き気味だけど。
798:デフォルトの名無しさん
08/06/10 11:13:14
>>796
数値に特別な意味がない場合に、シンボル(名前)で記述できた方が判り易いことがしばしばあるから。
古いCだとdefineマクロしか選択肢がなかったのでデバッグ時に苦労したけれど、
enumならデバッガにシンボル情報をくれてやりさえすればシンボルのまま扱えるわけだ。
799:デフォルトの名無しさん
08/06/10 14:35:23
>>796
信号機を作るときに
enum state {
green = 0,
yellow,
red,
};
と状態を宣言しておけば便利ジャン。
黄色の次は紫に変わるようにしろ、と言われたときでもyellowの次の行にpurpleを足せばいい。
static constだとredの値も変更しなくちゃならない。
800:デフォルトの名無しさん
08/06/10 15:11:52
つまり
if (yello)
とかしとけば数値を気にしないで便利
801:デフォルトの名無しさん
08/06/10 15:25:29
>>799-800
そこは理解済みです、言われている通り
#defineやconstよりはるかに便利だと思います
>>796で質問したことをコードにすると
enum タグ名 {
名前1,名前2,・・・
} 変数宣言
とした場合、宣言した変数の活用方について教えて下さい、という意味です
説明が簡単過ぎてうまく伝わっていなくて申し訳ないです
stractならデータ管理が目的なので利用法が思いつくのですが
enumの方は使いどころがいまいちピンときません
802:デフォルトの名無しさん
08/06/10 15:29:34
enumシンボルのことでなく、enum型変数ってことか?
>797とか。後は、例えばenum state conditionとか宣言しておけば
condition変数にはenum stateのシンボルしか入れない積りであることが明確になる。
コンパイラによっては、switch (condition)したときにシンボルの抜けがないかもチェックしてくれる。
803:デフォルトの名無しさん
08/06/13 01:07:53
>>801
>>2-3
804:デフォルトの名無しさん
08/06/13 21:40:38
>>801
構造体の場合
typedef struct{
int a;
double b;
}HOGE;
みたいに変数宣言するんじゃなくHOGE型として宣言しといたほうが
typedefせずグローバルで変数宣言すると何かとふべんだから
typedefして使うところで変数宣言したほうが良い
enumなら下記みたいに宣言したりする。
typedef enum {FALSE = 0,TRUE = 1} BOOL;
805:誰か一緒に考えてください
08/06/13 22:37:30
もしプロトコルを開発するならどんなプロトコルにしますか??
806:デフォルトの名無しさん
08/06/13 22:49:23
>>805
漠然としすぎ
807:デフォルトの名無しさん
08/06/14 09:59:08
>>805
>もしプロトコルを開発するならどんなプロトコルにしますか??
既存のプロトコルを利用できないか、再検討する。
808:デフォルトの名無しさん
08/06/14 16:32:10
enum の話で考えたんだけど、
enum のすべてのメンバがそのスコープで有効になるのは勘弁してほしい。
メンバが多いと名前が衝突する可能性が高くなるし、
enum Style { None, A, B }; enum ExStyle { None, C, D };
みたいに同じ名前を使えないのは痛い。
仕方ないから、
namespace Style { enum Style { None, A, B }; } namespace ExStyle { enum ExStyle { None, C, D }; }
とか宣言して、
Style::Style style = Style::None; みたいに使ってる(非標準だけど VC++ は一応通してくれる)。
俺は本質的に enum の使い方を間違えてるんだろうか?
>>802 の言うように、特定の値しか入れない場合とかに使ってるんだが。
809:デフォルトの名無しさん
08/06/14 16:41:17
>>808
class内に置く方法もあるぞ。
810:デフォルトの名無しさん
08/06/14 17:02:09
>>809
なるほど。
class Style
{
public:
enum _Style { None, A, B };
private:
_Style value;
public:
Style() : value(None) { }
Style(_Style value) : value(value) { }
Style(const Style &style) : value(style.value) { }
bool operator ==(const Style &style) { return value == style.value; }
bool operator !=(const Style &style) { return value != style.value; }
operator int() { return (int)value; }
};
みたいにすれば Java, C# の列挙型と同じように扱えるわけか。switch にも入るし。
しかも #define とかうまく使えばこれを毎回書かなくても使い回せそうだ。
すばらしい一言アドバイスをありがとう。
・・・もしかして常識ですか?
811:デフォルトの名無しさん
08/06/14 19:48:18
残念ながら
812:デフォルトの名無しさん
08/06/15 00:40:33
あの、>>808ってどこが非標準なんですか?
名前空間と列挙型が同一の名前を持っていることでしょうか。
813:808
08/06/16 00:05:50
>>812
VC++ では
>コンパイラの警告 (レベル 1) C4482
>エラー メッセージ
>非標準の拡張機能が使用されています: enum 'enum' が限定名で使用されます
>型の中の列挙型を参照するときは、列挙型の名前を指定する必要はありません。
だと。(型名)::(列挙子名) とするのは非標準らしい。
よく考えたら
#define enum_class(Type) \
class Type\
{\
private :\
int value;\
public :\
Type() : value(0) { }\
Type(int value) : value(value) { }\
operator int() const { return value; }\
operator int &() { return value; }\
enum Tag;\
};\
enum Type::Tag
とかすればほとんど C# ライクな列挙型もどきができるな。
これも非標準だし、列挙型みたいにする意義も薄れてるが。
814:デフォルトの名無しさん
08/06/16 22:51:16
C/C++のばかたれっ!!
あー すっきり!!
もやっとボール 100000000個くれ!!
815:デフォルトの名無しさん
08/06/17 03:53:38
>>813
それは >808 の namespace を使った例に対して Style::Style::None とした場合の警告じゃないか?
Style::None なら最初の Style は namespace 名だから、その警告には該当しないだろ。
816:デフォルトの名無しさん
08/06/17 11:02:38
すまぬがちょいと質問。
下記のような構造体の中に構造体の中に構造体が入ってるような形にしてるんだが、
矢印の所でエラーで止まるんだ。
ちなみに「struct FGroup *fGroup」は空のまま。(初期化も何もせず)
ほんまに原因不明なんだぜ・・・
デバッグ出来ない環境だから、エラーの原因は不明なのよおおお
// h
struct FGroup {
char strKey[40];
};
struct AInfoGroup {
struct FGroup* srcfn[10];
};
struct MatchingResultGroup {
struct AInfoGroup* aig[6];
};
// cpp
struct MResultGroup *res;
〜中略 resに色々格納〜
struct AInfoGroup *aiGroup = res->aig[0];
for(int j = 0; j < 9; j++) {
struct FGroup *fGroup = (*aiGroup).srcfn[j];
if((*fGroup).strKey != NULL) {
char tmp[40];
strcpy(tmp, (*fGroup).strKey); ←ココでエラー
}
}
817:デフォルトの名無しさん
08/06/17 11:08:24
>>816
エラーメッセージぐらい貼れ。
人に原因を調べて欲しいならソースを略すな。
↓これ見ただけでポインタをよく理解していないというのがわかる。
> if((*fGroup).strKey != NULL) {
入門サイトをよく読みなおしたほうがいいかもしれない。
818:デフォルトの名無しさん
08/06/17 11:18:02
エラーメッセージですか。
MinGW Developer Studio にてソース作成して
VC++にてDLL連携してしているので下記のようにしか表示されません。。。
ハンドルされていない例外はACMatch.exe(MSVCRT.DLL)にあります: 0xC0000005: Access Violation。
例外処理 (初回) は ACMatch.exe (MSVCRT.DLL) にあります: 0xC0000005: Access Violation。
プログラム 'ACMatch.exe' はコード 0 (0x0) で終了しました。
>if((*fGroup).strKey != NULL) {
これは策がもうなくて、ものは試しにでやってみたのを削除し忘れていました。。。
819:デフォルトの名無しさん
08/06/17 11:22:13
>>816
>デバッグ出来ない環境だから、エラーの原因は不明なのよおおお
それでプログラミングしようってのが無謀。
820:デフォルトの名無しさん
08/06/17 12:03:38
中略部分を晒すつもりが無いなら、終了。
821:816
08/06/17 12:53:33
>>819
無謀なのは承知です。printfにてエラー発生箇所は分かるのですが
原因を特定する為のデバッグのみが出来ない状況ですので
それで納得し、何とかやっております。
>>820
記述通り「struct FGroup」はヘッダでの宣言のみにて
中略部分ではstruct FGroupへの格納どころか、
struct FGroupの要素のstrKeyが一切記述されていなかったので中略していました。
それでも晒した方がよろしいでしょうか?
822:デフォルトの名無しさん
08/06/17 12:59:16
>>821
相談したいなら晒したほうがいい。
でも、 strKey に値が設定されて無いなら strcpy でぶっ飛ぶのはあたりまえ。
823:デフォルトの名無しさん
08/06/17 13:02:48
>>815
ごめん、確かに (名前空間名)::(列挙子名) は問題ないわ
どっかで Style::Style::None みたいなことしたから警告でたんだろうな
>>808 そのものは非標準ではありませんでした。
(>>813 の「列挙型の前方宣言」は非標準のはず)
824:816
08/06/17 13:07:13
C言語はjavaのように自分で初期化しなくても
初期化されいてるとどこかで読んだ記憶があったので、
strcpyにて複写しても大丈夫かと思ってたのですが、、、駄目だったのですか?
825:デフォルトの名無しさん
08/06/17 13:11:13
>>824
記憶があるのならどこで読んだか思い出して内容を確認してくれ。
たぶん間違いだから、 Web 上の記事なら晒して欲しい。
C言語で自動初期化(ゼロ初期化)が入るのは非ローカル変数かローカルで static な変数のみ。
826:デフォルトの名無しさん
08/06/17 13:36:19
printf分でデバッグウィンドウに情報出力とか可能ですか?
827:デフォルトの名無しさん
08/06/17 13:49:18
OutputDebugString関数
828:デフォルトの名無しさん
08/06/22 00:49:36
>>816
MResultGroupってMatchingResultGroupのtypedefか?
resに色々格納って言ってるけど、MResultGroupのインスタンスはちゃんと確保されてるのか?
fGroup自体が0(NULLはC++では使わない方が良い)だったりしないか?
今回のエラーには関係ないけど、j < 9 は合ってるのか?j < 10じゃねーか?
829:デフォルトの名無しさん
08/07/06 12:44:12
数分前まではちゃんと動いてたのに、
急にこんなエラーを吐き出しました。
開発ソフト:BCC Developer
状況:コンパイラもデバッカもライブラリも誤字脱字共に無い、
エラーの内容:
> C:\borland\bcc55\Bin\make.exe -fDebug\dxtest.mak -B TARGET
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -L..\DxLib -DDEBUG -nDebug -I..\DxLib -c C:\puroguram\dxtest\test.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
c:\puroguram\dxtest\test.cpp:
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -L..\DxLib -DDEBUG -eDebug\dxtest.exe Debug\test.obj
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Fatal: Could not open Debug\dxtest.exe (program still running?)
** error 1 ** deleting Debug\dxtest.exe
Build End !! (Elapsed time 0:07.578)
書いた物:
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;//画像を表示する関数
WaitKey() ;//何か入力があるまで待つ関数
DxLib_End() ;//終了処理をする関数
return 0 ;
}
830:デフォルトの名無しさん
08/07/06 12:52:11
>>829
エラーメッセージをよく読め。アドバイスしてくれてるじゃないか。
831:デフォルトの名無しさん
08/07/06 13:19:50
>>830
もう一度よく調べてくる
832:デフォルトの名無しさん
08/07/06 13:35:52
program still running?
program still running?
program still running?
program still running?
program still running?
833:デフォルトの名無しさん
08/07/06 13:51:11
program still running? 訳(プログラム・動かない・見出し)
って意味であってる?
834:デフォルトの名無しさん
08/07/06 13:53:05
つまらん
835:デフォルトの名無しさん
08/07/06 14:02:45
ちゃんと辞書を引こう
836:デフォルトの名無しさん
08/07/06 14:06:46
program still running? (訳:あなたは気が付いていないけれど プログラムは静かに動き続けているだろう。 私にその健気なプログラムを殺してしまえというのか?)
837:デフォルトの名無しさん
08/07/06 17:27:22
はい、もちろん幸福です、親愛なるコンピュータ。
838:デフォルトの名無しさん
08/07/10 17:51:51
c++で
for(int n=0;n<1;n++)
func();
for(n=0;n<1;n++)
func();
みたいなfor()の括弧内での変数の宣言のスコープって括弧内とそのforループ内に限定されますよね。
これって昔のバージョンだとforのブロック内でも有効だったりしました?(下のforでも有効だった?)
839:デフォルトの名無しさん
08/07/10 18:09:24
>>838
C++ の仕様決定以前に先走り実装されたコンパイラはそうなってたりする。
MS VC++ 6.0 とか。
840:デフォルトの名無しさん
08/07/12 18:13:03
C++でC#同様にインテリセンスを働かせる方法ってないですか?
いちいちALT→押すのが面倒です。
841:デフォルトの名無しさん
08/07/12 19:44:33
何を使ってるかわからんもん
842:デフォルトの名無しさん
08/07/12 20:20:19
プリコンパイル済みヘッダを複数指定することは出来ますか?
843:デフォルトの名無しさん
08/07/16 15:14:24
#ifdef XXX
#endif
で囲まれた部分がコンパイルされたかをコンパイル時に簡単に知る方法を教えてください
844:デフォルトの名無しさん
08/07/16 15:15:06
>>843
#ifdefと#endifの間に#errorと書く
845:デフォルトの名無しさん
08/07/16 15:23:22
>>843
XXX_defined とか XXX_undefined ってグローバル変数を定義しておいて
オブジェクの中に該当シンボルが存在するか否かを調べる
もしくは
コンパイラにアセンブラソース吐かして眺めてみる
もしくは
出来上がったオブジェクトファイルの逆アセンブルリストを眺める
846:デフォルトの名無しさん
08/07/16 15:24:08
>>845 すまんコンパイル時っての見てなかった。忘れてくれ
847:デフォルトの名無しさん
08/07/18 07:56:37
#errorだとそこでコンパイルが終了してしまうかも。
実害のない警告が出るようにしておけばいい。たとえば
#ifdef XXX
#define XXX_DEFINED 0
#define XXX_DEFINED 1
...
#endif
848:デフォルトの名無しさん
08/07/18 08:45:39
うわー、意味ねーw
849:デフォルトの名無しさん
08/07/20 16:42:29
std::tr1::unordered_mapを使わないといけないんですが現在の環境(gcc3)には入っていません。
これはどのライブラリに入っていますか?
850:デフォルトの名無しさん
08/07/20 16:49:10
>>849
STLport かな?
851:デフォルトの名無しさん
08/07/20 17:27:51
>>850
STLportにありました。ありがとうございます。
852:デフォルトの名無しさん
08/07/20 17:30:06
>>849
std::map じゃなくて unordered_map を「使わないといけない」状況って、どんなの?
853:デフォルトの名無しさん
08/07/20 17:47:57
>>852
ビルドしようとしたソフトがunordered_mapを使っていたからですよ。
854:デフォルトの名無しさん
08/07/23 18:42:45
vc++のデバッグの仕方が分からないんだけど
c#のconsole.writelineみたいにvcのデバッガに出力する方法ってないの?
outputdebugstring()とかやっても出てこないんだけど。
855:デフォルトの名無しさん
08/07/23 20:52:35
>>854
出てるよ、見てるとこが違うだけだ
856:デフォルトの名無しさん
08/07/24 08:24:23
>>854
MFCを使ってるならTRACEマクロ
ATLを使ってるならATLTRACEマクロ
WIN32APIだけならOutputDebugStringをじかに使う。
C++・CLIならC#と同じのが使える。
857:デフォルトの名無しさん
08/07/24 17:21:59
最近勉強始めた初心者です。すっげー初歩の質問で悪いんですけど、
関数の宣言のとこで、引き値とか戻り値とかそれ自体の説明は
分かるんですけど、その使い分けの所がいまいちピンとこなくて。
例えばint main(void)とintとかその辺自体は分かるんですけど、
返り値が無いならvoidとかの説明で、じゃあなんで
このときはvoid使わないんだとか、自分が一からプログラム組むと仮定して考えた場合、
その辺の区分けと言うか、使い分けが明瞭に納得がいかなくて。
いろんな解説読み漁ったんですけど、はっきり分かんなくて。
858:デフォルトの名無しさん
08/07/24 17:57:48
>>857
引数は渡すもの、戻り値は返すもの。
渡すパラメータがなければ引数はvoid、返す結果がなければ戻り値はvoid、両方何もなければ両方void。
自分で1からプログラムを組む場合、関数がどのようなパラメータを取ってどのような結果を返すかは、自分の都合と独断と偏見で勝手に決める。
例えば・・・ファイルに文字列を書き込む関数を作ることにしたとすると、その関数にはたぶんファイル名と書き込む文字列を指定する必要があるだろう。
ファイル名が固定なら、書き込む文字列だけ指定すればいいかもしれない。
結果は特に何も要らないかもしれないし、書き込みに成功したか失敗したか知りたいかもしれない。
それは自分が (別の人が使う関数なら、その人が) どういった機能を必要としているかによって決める。
フルバージョンならたぶんこんな感じ
int write_text_to_file(const char *filename, const char *text);
成功/失敗といった結果は別に要らないと思ったなら、戻り値はvoidにして
void write_text_to_file(const char *filename, const char *text);
ファイル名は固定なので特に指定する必要はないと考えるなら、その部分は削って
void write_text_to_file(const char *text);
実は文字列も固定なんだ、って場合は、何も指定するものがないので
void write_text_to_file(void);
859:デフォルトの名無しさん
08/07/26 01:22:48
自分は引数voidの関数は滅多に作らないな。
グローバル変数使えば引数で渡さなくてもいいけど、
何をする関数なのかわかりにくくなるし。
860:デフォルトの名無しさん
08/07/26 02:23:01
渡す情報が要らないからvoidなんですよ。
861:デフォルトの名無しさん
08/07/26 08:54:19
そうそう、time()なんて愚の骨頂ですよ。
862:デフォルトの名無しさん
08/07/26 09:38:10
渡すものがなかったら、かわいい君に寄せる想いを僕調の曲にして渡せばいいじゃない。
863:デフォルトの名無しさん
08/07/26 11:15:13
>>862
華麗にスルーされる訳ですね。わかります。
864:デフォルトの名無しさん
08/07/27 12:19:58
cin を使った入力ってメモリからあふれる位いっぱい入力した場合
バッファアンダーランとかになったりするの?
865:デフォルトの名無しさん
08/07/28 12:47:37
なりません。そもそも、バッファアンダーランなんて現象自体、データストレージに関するものです。
866:デフォルトの名無しさん
08/08/03 13:30:11
Access Violationが出ているのですが、
これはそのプロセスが確保していないメモリ空間から読み込もうと
したときに出るのですが?
867:デフォルトの名無しさん
08/08/03 13:38:36
確保してない領域に書き込もうとしたときも出るし
確保されてても読み取り専用領域に書き込もうとしたときも出る
868:デフォルトの名無しさん
08/08/03 17:05:21
>>866
そんなもん、環境によって違います。そもそも出ない環境だってたくさんあります。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4764日前に更新/249 KB
担当:undef