トップページ⇒tech
1001コメント316KB

【初心者歓迎】C/C++室 Ver.7【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。

【初心者歓迎】C/C++室【環境依存OK】
http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
【初心者歓迎】C/C++室 Ver.2【環境依存OK】
http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
【初心者歓迎】C/C++室 Ver.3【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
【初心者歓迎】C/C++室 Ver.4【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
【初心者歓迎】C/C++室 Ver.5【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1077102238/ (html化待ち)
【初心者歓迎】C/C++室 Ver.6【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1082182233/l50

【ラウンジ】質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
0232デフォルトの名無しさんNGNG
>>231
今のところシンボリックリンクから呼び出されることはない予定です。
0233デフォルトの名無しさんNGNG
>>232
じゃあ>>230でいいんじゃないかな。
ただしargv[0]は置き換えて。
0234デフォルトの名無しさんNGNG
>>230-233
Windowsで229とおんなじことしたい場合も同様にできるんですか?
それともAPIがあるんでしょうか?
0235デフォルトの名無しさんNGNG
みんなコンパイラ何使ってる?
0236227NGNG
>>228さんありがとうございます。
他のところも一応調べてみたのですが
どうも間違ってるようには感じられませんでした。
あいまいな聞き方かもしれませんが
vfptrがNULLになってしまう、考えられる要因を
教えていただけませんでしょうか。
後、遅れましたが環境はVC++6.0です。
0237デフォルトの名無しさんNGNG
一回、同様の現象が起こるはずのミニマムなソースを書けば?
それで起こらなかったら確実に元ソースが悪い。デバッグで追っていくか差異を調べる。
もし起こったらおそらくどっちのソースも悪い。そのソースをここに貼って指摘を待つ。
0238デフォルトの名無しさんNGNG
ターゲットが95の場合、ビルドも95じゃないとダメ?
0239227NGNG
すいません、解決しました。
クラスの初期化の方法に問題があったようです。
0240デフォルトの名無しさんNGNG
string型をchar*に変換するには何をつかえばいいんですか?
0241デフォルトの名無しさんNGNG
>>240
おそらくあなたが望んでいるのは c_str()でしょう。
もちろん入門書の類は持ってますよね。
あとは索引からc_strのページを見つけて、読んでください。
0242デフォルトの名無しさんNGNG
C言語でコンソールアプリを作っているのですが、
ディレクトリの存在を確認する方法ってありますか?
OSはXPです。system関数などでDOSのコマンド使っても
いいのですが。batファイルなんかだとif exist ....
ってのがありますが、これはsystem関数からは使えない
ようです。C言語の標準にも確認する関数はないですよねぇ?
できるんでしょうか。
0243デフォルトの名無しさんNGNG
chdir
0244242NGNG
mkdirやchdirで、在る無いにかかわらず無理やりやる
方法もあると思いますが、その場合、存在しないと
エラーでシステムからメッセージが表示されちゃうん
ですよね・・・。エラーださないで、チェックだけを
する方法ってないもんですかねぇ。
0245デフォルトの名無しさんNGNG
VC++スタンダード使っているけど、空のデフォルトコンストラクタが律儀に呼ばれてしまいます。
オプティマイザの付いているVC++Professionalだとちゃんと抑制されるんでしょうか?
その他、あまりにバカなコード生成に泣きたい思いです。
0246デフォルトの名無しさんNGNG
>>245
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/l50
最適化付Pro版が手に入る
0247デフォルトの名無しさんNGNG
>>244
漏れなら、標準にこだわらず素直にWin32 API使う。そもそもchdirも
nkdirも標準じゃないんだし。

>>245
VS2003だと、debugだと呼ばれて、releaseはきれいになくなったよ。
0248デフォルトの名無しさんNGNG
>>242
GetFileAttributesはどう?
ファイル名を指定して失敗したら-1を返す。ただし符号なしのDWORD型w

#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv)
{
  if (GetFileAttributes(argv[1]) == (DWORD)-1)
    printf("ファイルはない");
  else
    printf("ファイルはある");
  return 0;
}
0249242NGNG
みなさんレスどうもです。
やはりファイルシステムは処理系依存だから標準では
どうにもならんですか。素直にAPIとか使うしかないですね。
ちなみに
system("mkdir");
system("cls");
で、もしディレクトリ既存のエラーがでても一瞬出てすぐ消せますね(w。

余談ですが、C++のBoostにfilesystemってのがあるようですが、あれだと
チェックができてなおかつ移植性があったりするんですかね・・・。
0250デフォルトの名無しさんNGNG
ディレクトリも扱えないコンパイラってどんなの?
見たことないな
0251デフォルトの名無しさんNGNG
>>242
バッチコマンド使いたかったらcmd.exe経由で動かせばsystem()からでも使えなくはないけど…
APIで事足りるならそのほうがいいと思います。
つーか、system()使うとそれだけでDOS窓開くしねぇ。
0252デフォルトの名無しさんNGNG
>>249
エラー出力のリダイレクト
http://homepage2.nifty.com/winfaq/c/hints.html#548
system("mkdir 〜 2> NUL")
でも俺のWin98では無理だった……
他には一時的に文字の色を背景色と同じ色に変更してmkdirを使うとかw
0253デフォルトの名無しさんNGNG
* MAKEDIR.C: _mkdir 関数を使用して、ディレクトリを作成後、
 * _rmdir 関数を使用して、ディレクトリを削除します。*/

#include <direct.h>
#include <stdlib.h>
#include <stdio.h>

void main( void )
{
   if( _mkdir( "\\testtmp" ) == 0 )
   {
      printf( "ディレクトリ '\\testtmp' が正常に作成されました。\n" );
      system( "dir \\testtmp" );
      if( _rmdir( "\\testtmp" ) == 0 )
         printf( "ディレクトリ '\\testtmp' が正常に削除されました。\n"  );
      else
         printf( "ディレクトリ '\\testtmp' が削除できません。\n" );
   }
   else
      printf( "ディレクトリ '\\testtmp' が作成できません。\n" );
}
0254デフォルトの名無しさんNGNG
unixのc++でスレッド書いてるんだけど
windowsのWaitForSingleObject
みたいに休止できるできるやつってありますか?
pthread_cond_waitとかはなんか違うっぽいし・・・
0255デフォルトの名無しさんNGNG
オススメはpollかなあ
0256151NGNG
レスが遅くてすいません。

>>218
確かにそうですが、まぁ例と言うことで。

>>219
>4. class Watch の中で set をオーバーロード
は 「class Dispの中で」での間違いでしょうか?
Watchの中でオーバーライドするとDAT.set()が呼べないと思うのですが・・・

>要は Disp で set() を呼び出せないようにしたいと解釈したんだけど
その通りです。
0257229NGNG
家に帰ってから>>230の中にあったシステムコールというキーワードで調べたら
http://x68000.startshop.co.jp/~68user/unix/pickup?realpath
という所が見つかって無事に目的を達成できました。

皆さんどうもありがとうございました。
0258デフォルトの名無しさんNGNG
>>257
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/realpath.3.html
↑ここには、「この関数は決して使わないこと。」なんて書かれてるな。
0259デフォルトの名無しさんNGNG
>>234
Windowsなら、GetModuleFileName(NULL,... でいける。
0260234NGNG
>>259
ありがとうございます!
実は密かにけっこう前から謎だったんで助かりました!!
0261219NGNG
>>256
>Watchの中でオーバーライドするとDAT.set()が呼べないと思うのですが・・・
えーと、いちおう Dat DAT; ていう変数自体使わない方向性で継承の手順書いて見たんだなぁ。
ちょっと言葉がたりなかったかな?(反省)
set 呼ぶときは Watch::exec() のなかで
>DAT.set(key);
の部分をただ単に
set(key);
って書く感じ。(オーバーライドしてあれば書けるでしょ?)
そうすると、set は Watch の中で「敢えて」オーバーライドしない限り使えない。
→つまり Disp の中では使えない。
っていうのが実現されるかなぁと。

もし Watch クラスの方は逆に Dat の key を読めないようにしたいなら、継承するとき private にするなり、Dat::is() を virtual にして Disp でオーバーライドするなり微調整してみては?

だいたい継承使わなくても>160+>162の方法じゃ納得いかないの?
結局アクセス制御の点では似たようなことになると思うんだけど。
0262218NGNG
>>256
> 確かにそうですが、まぁ例と言うことで。

突っ込まれて「例と言うことで」で済むようなソース晒しても意味無いだろうが。
何で「ソース晒せ」と言われたかわかってんの?
0263160 and 162NGNG
>>215-217の例だと該当部分はこうなるのかな。

//----- dat.h -----
class Dat {
public:
  char is() const { return key; }
  void set(char c) { if (c) key = c; }
private:
  char key;
};

//----- main.cc -----
#include "dat.h"
class Watch {
public:
  void exec()
  {
    char key = キーボードからの入力をみる();
    dat_.set(key);
  }
private:
  Dat dat_;
};


ちなみに>>215-217だと>>151でいう「ある物の状態」の「ある物」と
Dat::set()の引数が同じだけど本物でもそうなの?
0264263NGNG
ちょっと訂正&追加

//----- main.cc -----
#include "dat.h"
class Watch {
public:
  void exec(Dat& dat)
  {
    char key = キーボードからの入力をみる();
    dat.set(key);
  }
};
class Disp {
public:
  void exec(const Dat& dat) const { if (dat.is()) std::cout << dat.is() << std::endl; }
};

int main() {
  Watch w;
  Disp d;
  Dat dat;
  while(1) {
    w.exec(dat);
    d.exec(dat);
  }
  return 0;
}

0265デフォルトの名無しさんNGNG
VC++ .net 2003です。
switch文のラベルにマクロを使うと、
「error C2143: 構文エラー : ':' が ';' の前にありません。」
となりコンパイルが通りません。

例)
#define UM_TEST (WM_USER+1);
(中略)
switch(message)
{
case WM_COMMAND:
break;
case WM_CLOSE:
case UM_TEST: ←この行でエラー
default:
return ....
}

なお、ラベルのUM_TESTをWM_USER+1と記述すると正しく動きます。
0266デフォルトの名無しさんNGNG
>>265
ネタ?

> #define UM_TEST (WM_USER+1);
↑の末尾のセミコロンを取り除け。
0267デフォルトの名無しさんNGNG
>>266
ほ、ほんとだ・・・
寝ぼけてました。
すみません。
出直してきます。
かなり恥ずかしいですね・・・
0268デフォルトの名無しさんNGNG
glibc2ならrealpathは使っても大丈夫なんじゃない
0269151NGNG
>>261
class Watch : public Dat
class Disp : public Dat
と継承するという事ですよね?

>そうすると、set は Watch の中で「敢えて」オーバーライドしない限り使えない。
>→つまり Disp の中では使えない。
ここが意味が分からないのですが・・・
継承してるならオーバーライド「しない」状態でDat::set()が使えると思うのですが。

>Dat::is() を virtual にして Disp でオーバーライドする
同様に↑もよくわかりません。
私が何か勘違いしてるんでしょうか。

>>262
実際はDATにシングルトンパターンを使っているので
それ程大きな問題にはならないと思っています。
(#define DAT Dat::instance()とかしてる)

>>264
コンパイルできる環境がないので試せないのですが
constを付けるとDisp::exec()でdat.set()は呼べなくなるという事ですか?
0270デフォルトの名無しさんNGNG
>>269
>class Watch : public Dat
>class Disp : public Dat
>と継承するという事ですよね?
そうそう。

>継承してるならオーバーライド「しない」状態でDat::set()が使えると思うのですが。
また説明足らなかった・・・。混乱さしてスマソ。
virtual にして =0 つけないと意味無かったね。
純粋仮想関数っていうんだっけ?オーバーライドしないと使えない奴。
まあ継承ってのはちょっとした思い付きで言っただけだから、
>すっきり
は組めないかもね。

>>>264
>コンパイルできる環境がないので試せないのですが
>constを付けるとDisp::exec()でdat.set()は呼べなくなるという事ですか?
そうだよ。まー>264はキレイな回答だとおもうしこれで
>すっきり
したらいいんじゃない?ダメなら継承も考えてみるけど。
0271270NGNG
あ、今思ったけど純粋仮想関数ってオーバーライドしなきゃいけないんだったっけ。
そうすると Disp::set() も書かなきゃいけないから、定義のしかたで書き換えできないようには出来るけどかなり微妙だな・・・。
こりゃすっきりしないかもね。すっきりするにはコーディングの変更が多そうだ。やっぱ264にしといたら?
0272デフォルトの名無しさんNGNG
>>271
>あ、今思ったけど純粋仮想関数ってオーバーライドしなきゃいけないんだったっけ。
をい、んなこと当たり前じゃない毛。おまえレベル低すぎ。
0273151NGNG
>>270
>そうだよ。まー>264はキレイな回答だとおもうしこれで
これが本当ならかなりビックリです。
コンパイラがメンバ関数の中身まで見てるとは思えないのですが・・・
明日試してみます。 

>あ、今思ったけど純粋仮想関数ってオーバーライドしなきゃいけないんだったっけ。
了解です。そもそもDatをWatchに継承するのはfriendを使うより抵抗があります・・・
0274デフォルトの名無しさんNGNG
>コンパイラがメンバ関数の中身まで見てるとは思えないのですが・・・
コンパイラはメンバ関数の宣言を見ている。
char is() const ←これ
void set(char c) ←こっちは const がない
そうすると Disp::exec の引数 const Dat& のインスタンスは is を呼べても set を呼べない。
0275デフォルトの名無しさんNGNG
>>269
> 実際はDATにシングルトンパターンを使っているので

アクセス許可の観点からは、externと同レベルだと思うんだけど。
0276264NGNG
>>273
>>そうだよ。まー>264はキレイな回答だとおもうしこれで
>これが本当ならかなりビックリです。

もしかしてネタで書いたコードだと思われてたのか?
そうか、だからスルーされ続けてたのか。
0277151NGNG
>>275
それはその通りですね。

>>274
なるほど!謎が解けました。
実際やってみましたが、set()を呼ぶとエラーになりました。

>>276
無視してたわけじゃなくて、正直理解できなかったんです。申し訳ない。
ただ実際にはexec()の引数にはできないので
もうちょっと工夫してみます。
ありがとうございました。
0278デフォルトの名無しさんNGNG
以下のようなプログラムを組みました。
-20%7の出力結果を1にしたいのですが
どうやったらいいのでしょうか?

#include <stdio.h>
int main(void)
{
int t;
unsigned int s;
t = -20%7;
s = -20%7;
printf(" signed unsigned\n");
printf("-20%%7=%d -20%%7=%d\n",t ,s);
t = 20%7;
s = 20%7;
printf(" 20%%7=%d 20%%7=%d\n",t ,s);
return 0;
}
0279デフォルトの名無しさんNGNG
わりざんできますか?
0280デフォルトの名無しさんNGNG
>>279
???
なんのこっちゃ?
0281デフォルトの名無しさんNGNG
>>280
20 ÷ 7 = 2 あまり 6
0282デフォルトの名無しさんNGNG
あってんじゃん
-20/7=-2 あまり 1だけど?

マイナス20なんですけど・・・
0283デフォルトの名無しさんNGNG
余りの定義って、常に正数なの?
0284デフォルトの名無しさんNGNG
正数で割った時はそうだす
だから困ってんです。
Cでもあまりは正で出力されるとばかり思ってたから・・・
0285デフォルトの名無しさんNGNG
>>282
-20 = 7*(-3) + 1
だから -3 余り 1 じゃね?

余りは常に正と言うんなら(t+7)%7で求まると思うが。
0286デフォルトの名無しさんNGNG
すまんかった
-20=7*-3 + 1だ
-2じゃ、なかたよ
いちいちif文書くのめんどくさっておもったんだ
cの規格に何とかする方法があればそっち使いたいなーって
0287デフォルトの名無しさんNGNG
整数除算
ttp://seclan.dll.jp/c99d/c99d05.htm#dt19990607

俺の環境では、非C99の場合 -20 % 7 == 6
0288デフォルトの名無しさんNGNG
>>281-282
お前らちゃんとCの勉強してから文句言え
0289デフォルトの名無しさんNGNG
こいつらすげーあほだ・・・。
0290デフォルトの名無しさんNGNG
< おれもおまえもなああああぁぁぁぁぁ!!
<
  ∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨


         |:\             |:\
         |::: \           |:::: \
         |::::  ヽ          |::::::: │
         |:::::::  丶――⌒゙゙^ ̄ ̄    │
        /:::::::      _,,,,__,_,  U  , , ,,,丶
      /::::::::::::   z-/^   丶  // ̄ ̄\|
     /:::::::::::::::::: ..彡│   ● |l ‖   ● |
   /::::::::::::::::::::  人i‖      》  |      |
  {:::::::::::\\J     .\_,,,,,u= ⌒ \_,,,,,__/\
  |::::::::::::::::::)  (          ⌒        |
  |::::::::::::::::/ /∩ // ̄ ̄\,,,,,____,,,\.  |
  {:::::::::::::::    |  |\/┘┘┘┘┘┘|/| .│ .|
  |:::::::::::::::      |lllllllllllllllllllllllllllllllllllllllllllll| |    |
  |:::::::::::::::      | ⌒\⌒\llllllllllllllllllll| |    |
  {:::::::::::::::      |.    \    |lllllllllll| |   |
   |:::::::::::::::  |   |     ヽ   |lllllllll| |   |
   \::::::::::::::: │   |     │   |lllllll| |  |
    \:::::::::::::: \  |∧    │   |lllllll| |  |
    /:::::::::::::::  \ \\       \∧.  |
  /::::::::::::::    :::\ \\┐┐┐┐┐ \ \
/:::::::::::::::     ::::::::::::\  ゙゙^^¨゙゙^^¨^゙゙¨¨゙゙¨^゙) \

0291デフォルトの名無しさんNGNG
div()
0292デフォルトの名無しさんNGNG
フォームビューを複数作ってそれらを複数一緒にメインウィンドウに貼り付けるのは無謀な行為でしょうか。
ウィンドウ全体にかかるフォームAと
その一部がその他のフォームでも使用されるフォームB.
両方ともWinMainでCreateDialogすると、CreateDialogの順番によって動作が変わり、
Aが表示されてBが見えずAB両方にアクセスできる場合と、
ABともに表示されてBにアクセスできない場合とに分かれます。
(BはAやその他で使うカラーテーブルのフォームで、Bの操作でAの動作が変わるように考えてます)

自分としては、AにBがそのまま乗るような動作を期待してるんですが、どうもうまくいきません。
この場合、どうしたらいいんでしょうか。
0293デフォルトの名無しさんNGNG
>>292
スレ違い。
WinAPIスレあたりで聞いてみたら。
0294デフォルトの名無しさんNGNG
LinuxでSIGSEGVやSIGFPEなどのエラーシグナルが発生した場合に、C++の例外を送出したいのですが、どうしたらいいでしょう?
シグナルハンドラの中から例外を出してもうまくいきませんでした。。。

0295デフォルトの名無しさんNGNG
Red Hat Linux 9でプログラムをしているのですが(C言語)
cc test.c
gcc test.c
とするのではなにが違うのでしょうか?
0296109NGNG
>>295
コンパイラが違う。
0297デフォルトの名無しさんNGNG
ccはgccへのリンクだろ
0298デフォルトの名無しさんNGNG
public継承ばかり使っています。
protected/private継承の使い分けを教えてください

0299デフォルトの名無しさんNGNG
>>298
既存のクラスを実装に利用したい時に使える。
class deck : private deque<card> {...}; // デッキ(トランプの)を実装するのにdequeを利用する。
これとほぼ同じ事が、privateメンバ変数としてそのクラスの
員ん洲箪笥をを持つ事によって実現できるから、あまり使われない。
protected継承は基本的にprivate継承と同じ使い方をするが、この場合deckからさらにクラスを派生させたくて、
そこからもdequeを利用できるようにしたい時に使える。
これはdeckのprotectedメンバ変数としてdequeを持つのに似ている。
0300デフォルトの名無しさんNGNG
というか、Effective C++とMore Effective C++位読もうや>>Public/Private継承
0301デフォルトの名無しさんNGNG
CGod //1つしかインスタンスを作れないクラス
CMan //沢山のインスタンスを作れるクラス、かつ全員が同じCGodにアクセスできる
CMan a;
とやるだけでどこかにCGodが1人作られる
その後はCManが何人作られようがCGodは一人
CGodはCManを介さないとアクセスできない
CManが一人も居なくなるとCGodは勝手に消滅する
グローバルオブジェクトを使わずに、こんなことをクラスで構築可能ですか?
0302デフォルトの名無しさんNGNG
class CMan {
public:
CMan() {
if(!_godref) {
_pgod = new CGod();
}
_godref++;
}
~CMan() {
_godref--;
if(!_godref) {
delete _pgod;
}
}
private:
CGod* _pgod;
static int _godref;
};
int CMan::_godref = 0;
0303デフォルトの名無しさんNGNG
>>302
_pgod は static じゃなくていいの?
だってさー、

int main() {
CMan * saishonohito = new CMan;
CMan * tsuginohito = new CMan;
delete saishonohito;
delete tsuginohito;
return 0;
}

のとき tsuginohito のデストラクタは何を delete するんだ?
っていうか>>301の言う CGod はどうやって定義するつもり?
>1つしかインスタンスを作れないクラス
っての無茶じゃね?
0304デフォルトの名無しさんNGNG
叔母加算
0305デフォルトの名無しさんNGNG
>>304
omaemona-
0306デフォルトの名無しさんNGNG
普通にシングルトンだな。
手っ取り早くCManの中にstaticでCGod詰め込んどけ。
0307デフォルトの名無しさんNGNG
神は己の中に居る。
0308デフォルトの名無しさんNGNG
叔父減算
0309デフォルトの名無しさんNGNG
>>306
>CManが一人も居なくなるとCGodは勝手に消滅する
0310デフォルトの名無しさんNGNG
ヒトの都合で神が消滅するとはこれいかに?
0311デフォルトの名無しさんNGNG
ヒトが神を作り出すから、ヒトが消滅すれば神も消滅する。
0312デフォルトの名無しさんNGNG
ナルヘソーヽ(´ー`)ノフワーア
でも言えてるな・・・。
0313デフォルトの名無しさんNGNG
ある負の数をprintf関数で16進数や8進数として出力しようとすると、
でたらめな値が出てくるんだけれど、なぜだろう?
0314デフォルトの名無しさんNGNG
>>313 ソース見なきゃわからん。
0315デフォルトの名無しさんNGNG
>>313
%x,%X,%o、それにlやhをつけたものは符号無し整数を相手にする。要するに%uの16,8進数版。
0316294NGNG
>>294
0317デフォルトの名無しさんNGNG
>>315
負の値として出力することはできない?
0318デフォルトの名無しさんNGNG
>>317
「2の補数」で検索するといいかもしれない。
0319デフォルトの名無しさんNGNG
文字列(CSVデータ)をカンマ区切りに分解して、配列にコピーしようと考えています。
とりあえず、文字列の先頭から1文字ずつ","か"\n"をチェックして文字数分だけループさせるソースを書いたのですが、
もっと簡単な方法は無いでしょうか。

環境はVC++で、MFCは使っていません。

0320デフォルトの名無しさんNGNG
>>319
strtok()
0321デフォルトの名無しさんNGNG
>>319
boost::tokenizer使えばあっちゅーまだよ?
インストールがめんどくさいだけだが
0322デフォルトの名無しさんNGNG
ちょっとスレ違いかもしれませんが質問
Linux+Intel compilerとWinXP+VC6でコンパイルしたオブジェクトファイルを組み合わせてリンクすることは可能でしょうか?
0323デフォルトの名無しさんNGNG
対応したリンカならできるかもな
そんなのが存在するか知らんが。
0324デフォルトの名無しさんNGNG
下記のクラスの定義でエラーが出ました。何かがまずいようなのですが、何がまずいのか分からないのです。
コンストラクタで、文字列を解析するつもりです。
lpszBuffには、文字列のアドレスを受け渡してるつもりです。

class DbCardBase{
public:
DbCardBase(LPSTR lpszBuff);
};

DbCardBase::DbCardBase(LPSTR lpszBuff){
char *szBuff;
szBuff = lpszBuff;
};
0325デフォルトの名無しさんNGNG
出ないけど。
0326デフォルトの名無しさんNGNG
最近CとC++を始めました。
ポインタはなんとなく理解出来始めたのですが
文字列の扱いに未だ疑問があります。

文字列("abcde")はchar*の変数と同じような働きをしている?というような解説をどこかで見たので、
自分でも色々と試してみました。

cout << *("abcde") << endl;
この実行結果は a になりました(理解しました。)

cout << "abcde"[3] << endl;
この実行結果は d になりました(理解しました。)

cout << &("abcde") << endl;
私の理解ではこれで文字列"abcde"を指すポインタのアドレスが出ると思ったのですが
文字列がそのまま出てしまいます。
私の理解の仕方がおかしいのでしょうか?
0327デフォルトの名無しさんNGNG
>325
出ないんですか _| ̄|○
となるとエラー箇所が他なのですね。研究します。
0328デフォルトの名無しさんNGNG
CかC++でURLエンコードできるやつってないですか?
0329324NGNG
すみません、もう1つ。構造体やクラスのポインタを、
関数の引数として受け渡しするとき、受け側の型は何にすればよいのでしょうか?
0330デフォルトの名無しさんNGNG
const T&
0331デフォルトの名無しさんNGNG
>>326
ポインタが理解できているなら文字列も理解できるはず。
逆をいうと・・・(ry
■ このスレッドは過去ログ倉庫に格納されています