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

C++相談室 part38

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

前スレ part37
http://pc5.2ch.net/test/read.cgi/tech/1098543578/

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0002デフォルトの名無しさんNGNG
1 http://mimizun.mine.nu:81/2chlog/tech/piza.2ch.net/tech/kako/980/980175292.html
2 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html
0003デフォルトの名無しさんNGNG
16 http://pc5.2ch.net/tech/kako/1045/10457/1045746245.html
17 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
31 http://pc5.2ch.net/test/read.cgi/tech/1086185282/
32 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
35 http://pc5.2ch.net/test/read.cgi/tech/1093958200/
36 http://pc5.2ch.net/test/read.cgi/tech/1096304546/
37 http://pc5.2ch.net/test/read.cgi/tech/1098543578/
0004デフォルトの名無しさんNGNG
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[C++ International Standard]
 http://www.kuzbass.ru/docs/isocpp/
 http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
 http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)
0005デフォルトの名無しさんNGNG
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/
0006デフォルトの名無しさんNGNG
■Books(Templateまわり)■
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
 http://www.amazon.com/exec/obidos/ASIN/0321227255/
0007デフォルトの名無しさんNGNG
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html
0008デフォルトの名無しさんNGNG
>>1乙!
0009デフォルトの名無しさんNGNG
あ"ー
0010デフォルトの名無しさんNGNG
あ"ー
0011デフォルトの名無しさんNGNG
あ"ー?
0012デフォルトの名無しさんNGNG
あ"ー
0013デフォルトの名無しさんNGNG
STLつかうと一気に実行ファイルサイズが10倍に?!
0014デフォルトの名無しさんNGNG
1天乙
0015v(^・^)vNGNG
>>13
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0016デフォルトの名無しさんNGNG
屁
0017v(^・^)vNGNG
>>15
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0018デフォルトの名無しさんNGNG
>>17
実際増えないだろ。
0019v(^・^)vNGNG
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
0020デフォルトの名無しさんNGNG
>>19 マルチパラダイムシフト
0021v(^・^)vNGNG
>>19
#include <stdafx.h>

後死ね。
0022v(^・^)vNGNG
>>21
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0023デフォルトの名無しさんNGNG
今回のテンプレにマジレス
>>17,>>19 計2件

今回のあ"ー
>>9-12 計4件
0024デフォルトの名無しさんNGNG
テンプレにマジレスは
×>>17,>>19
○>>18,>>20
の間違いだった
0025デフォルトの名無しさんNGNG
ここは人工無能のいるスレでつか?
0026デフォルトの名無しさんNGNG
age
0027デフォルトの名無しさんNGNG
伊能四郎のような感じですか?
0028デフォルトの名無しさんNGNG
珍子産む嚢
0029デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1101484548/
↑はネタスレでいいか。あの俺俺スレみたいに。
0030停止しました。。。NGNG
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
0031再開しました。。。NGNG
真・スレッドリジューマー。。。( ̄ー ̄)ニヤリッ
0032デフォルトの名無しさんNGNG
初めてみたw
0033デフォルトの名無しさんNGNG
どっちが本刷れ?
0034デフォルトの名無しさんNGNG
>>33
時間的にはこっちが本スレ。
ネタスレ用にされた方は削除依頼してほしいんだけど。
このスレ一回ageた方がいいのかもしれん。
0035デフォルトの名無しさんNGNG
前回に続き重複か。
今後は宣言してから建てるようにしてくれや。
0036デフォルトの名無しさんNGNG
age
0037デフォルトの名無しさんNGNG
>>35
voidがわざと重複させたように見える
0038デフォルトの名無しさんNGNG
下のコードなんですが、なんとか一時オブジェクトを作らずに済ます方法は無いでしょうか

#include <iostream>
#include <list>
class Destroy{
char* name;
public:
Destroy( char* new_name ){
name = NULL;
setName( new_name );
}
Destroy( const Destroy& destroy ){
name = NULL;
setName( destroy.name );
}
~Destroy(){
delete [] name;
std::cout << "デストラクタが呼ばれました" << std::endl;
}
void setName( const char* new_name ){
if( name ){ delete [] name; }
int size = strlen(new_name);
name = new char[ strlen(new_name)+1 ];
strcpy( name, new_name );
}
};
int main(){
std::list<Destroy> list_destroy;
list_destroy.push_back( "Hage" );
std::cout << "--------終了--------" << std::endl;
return 0;
}
0039デフォルトの名無しさんNGNG
Destroyへのポインタを格納するようにするとか。
ただそれするとリストを使う意味があるかどうかという問題が。
004038NGNG
>>39
ありゃ、それしか無いんですか。
ポインタで持つのは良くやるのですが、仰るとおりで、終了時に一々deleteが
必要で面倒なんですよね。面倒というかなるべく危険は避けたいというか。

まぁ、しょうがないので一時オブジェクト有りで…レスありがとうございました。
0041デフォルトの名無しさんNGNG
>>40
>終了時に一々deleteが必要で面倒なんですよね。
スマートポインタ
0042デフォルトの名無しさんNGNG
counted pointer を copy-on-write で
0043デフォルトの名無しさんNGNG
テンプレートクラスにBridgeパターン、もしくはpimplイディオムで、インターフェースと実装を分離したいのですが、どうすればいいのでしょうか。

当たり前なんですが、以下のようにするとエラーです。

// Test.h

class Test_impl;

template<typename T>
class Test {
Test_impl<T> *pImpl;

public:
Test( void );
~Test( void );

void Set( T data );
T Get( void );
};
0044続きNGNG
// test_impl.cpp
#include "test.h"

template<typename T>
class Test_impl
{
T p;
public:
Test_impl( void ){}
~Test_impl( void ){}

void Set( T data ){ p = data; }
T& Get( void ){ return p; }
};

template<typename T> Test<T>::Test( void )
{
pImpl = new Test_impl<T>;
}

template<typename T> Test<T>::~Test( void )
{
delete pImpl;
}
0045続きNGNG
Getが参照返してるのは見なかったことにして下さい……。
0046デフォルトの名無しさんNGNG
>>43
Test_implの前方宣言にもtemplate<typename T>を書けばコンパイルは通ったけど?
0047デフォルトの名無しさんNGNG
>>43
// Test.h
template<typename T>
class Test
{
class Impl;
Impl *pImpl;

// test_impl.cpp
#include "test.h"
template<typename T>
class Test<T>::Impl
{
0048デフォルトの名無しさんNGNG
あ、忘れてました。

コンパイルは通ると思いますが、実際に宣言すると、外部参照でエラーがでるかと思います。
004943NGNG
#include "test.h"

int main( void )
{
Test test; // !エラー

return 0;
}
0050デフォルトの名無しさんNGNG
>>48-49 意味わからん。
0051デフォルトの名無しさんNGNG
しょせんプリプロセッサだから。
005243NGNG
Test<T> が TestImpl<T> をnewするため、TestImplの定義以降に、Test<T> のコンストラクタを定義しないといけないんですが、テンプレートクラスなんで、出来ないんですよね、、、
0053デフォルトの名無しさんNGNG
まさかリンクしてないだけ
0054デフォルトの名無しさんNGNG
あれだ。「explicit instantiation」
0055デフォルトの名無しさんNGNG
clsss Test test;
だったりして・・・
0056デフォルトの名無しさんNGNG
>>52
export が使えない以上、test_inst.cpp を作って、

// test_inst.cpp
#include "test_impl.cpp" // cpp は変えたほうがいいかも
template class T<int>;
template class T<char>;

エラーが出なくなるまで explicit instantiation を並べるしかないんじゃない?
005743NGNG
>>56
ありがとうございます。この方法でいきたいと思います。
0058デフォルトの名無しさんNGNG
規格書丸暗記した。もう俺にC++に関して分からないことはない。
0059デフォルトの名無しさんNGNG
ごめんうそついちゃった。今がんばって読んでます。
0060デフォルトの名無しさんNGNG
規格書、印刷しようと思っても紙代も馬鹿になんないな…
本とか出てるの?本買った方が安いかも。
0061デフォルトの名無しさんNGNG
>>60
JISのなら紙で買えるはず
0062デフォルトの名無しさんNGNG
>>61
いくら?どこで買えるの?
0063デフォルトの名無しさんNGNG
>>61
ANSI/ISOとJISで差異とかあります?ないなら日本語だし願ったり叶ったり
なんですが。
0064デフォルトの名無しさんNGNG
>>62
規格番号 JIS X 3014:2003
標題 プログラム言語C++
和文冊子 17,325円

JSA Web Store から検索・注文できる。
http://www.webstore.jsa.or.jp/webstore/top/index.jsp
0065デフォルトの名無しさんNGNG
ありがとう。でも高いー。
0066デフォルトの名無しさんNGNG
サソクス
0067デフォルトの名無しさんNGNG
>>63
www.jsa.or.jp へ行くと、内容の同一性についてもはっきり区分わけしてあるよ
0068デフォルトの名無しさんNGNG
>IDT: identical(一致)
>以下の場合、地域又は国家規格は国際規格と一致している。
>  a) 地域又は国家規格が、技術的内容、構成及び文言において一致している。又は、
>  b) 地域又は国家規格が、ISO/IEC GUIDE 21の4.2節に規定した最小限の編集上の変更はあるが、技術的内容において一致している。「逆も同様の原理」があてはまる。
0069デフォルトの名無しさんNGNG
今時紙に印刷されたものを読もうなんてださいな。
0070デフォルトの名無しさんNGNG
>>69
煽り乙
0071デフォルトの名無しさんNGNG
>>70
JISの中の人乙
0072デフォルトの名無しさんNGNG
VC++で計算した数値を引数で表示したいんですが、printfで表示されません。だからMessageBoxを使って表示したいんですがエラーがでます。どうしたらいいんでしょうか?どなたか分かる人教えてください。
0073デフォルトの名無しさんNGNG
>>72
言ってることがわかりません。
コードとエラーメッセージをコピペしてください。
0074デフォルトの名無しさんNGNG
> 分かる人教えてください。
と書いてあるんだから分からない人は黙っていろよ。
0075デフォルトの名無しさんNGNG
おまえもな
0076デフォルトの名無しさんNGNG
つーか、マルチなんだからほっとけよ。
http://pc5.2ch.net/test/read.cgi/tech/1101100031/183
007721NGNG
コードです。
int delta_time=final_time-initial_time;
MessageBox(hwnd,delta_time,"時間",MB_OK);
エラーメッセージは
'hwnd' : 定義されていない識別子です。
hwndをこのコードの前に
HWND hwnd;
と宣言するとこのエラーがでます。
'MessageBoxA' : 2 番目の引数を 'int' から 'const char *' に変換できません
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です
と表示されます。
誰か分かる人教えてもらえると助かります。
0078デフォルトの名無しさんNGNG
>>77
MessageBoxは文字列しか受け付けない。
文字列へ直せ。
MessageBox(NULL, _itoa(delta_time), "時間", MB_OK);
0079デフォルトの名無しさんNGNG
〜〜file1〜〜   〜〜file2〜〜
datax1 datay1
datax2 datay2
datax3 datay3
って感じでデータが並んでいるファイルがいくつもあって、それを5つごとに
決まった順番で一つのファイルにまとめたいです。データを順番に並べたんですが
どんどん書き出していくと、file1とfile2と…の間に1行空行ができてしまいます。
具体的にどういうプログラムを書いたかというと

ifstream ifs;
ofstream ofs;
char datax[20],datay[20];
ifs.open(file1); ofs.open(outputfile)
while(!ifs.eof()){
ifs >> datax >> datay;
ofs << datax << " " << datay << "\n";
}
ifs.close();
ifs.open(file2);
while(!ifs.eof()){
ifs >> datax >> datay;
ofs << datax << " " << datay << "\n";
}
ofs.close();

って感じです。実際はfile1、file2と指定するのにループとか使ってるけど。
008079NGNG
空行があると、その後の処理がまた面倒になるので、空行は
入ってほしくないんですが、このプログラムでおかしいところって
ありますか?
0081デフォルトの名無しさんNGNG
>>80
datayに改行が入ってるんでないの?
008279NGNG
>>81
ビンゴでした。
ありがとうございます。
0083デフォルトの名無しさんNGNG
ttp://namazu.org/~satoru/unimag/9/

ここのHPのテキスト "abracadabra" の Suffix Array を作成する C 言語のサンプルプログラムのソースを
VC++6.0でビルドするとerror C2440: 'initializing' : 'void *' から 'int *' に変換することはできません。とエラーが出ます
どうにかならんもんでしょうか?
0084デフォルトの名無しさんNGNG
C++ではなくCとしてコンパイルする。

「C言語のサンプルプログラム」って、てめーで書いてるじゃねーか。
0085デフォルトの名無しさんNGNG
VC++6, 7.1で、デストラクタを呼び出すときに、
クラス名でなく、変数名を使えるんですが、正しい仕様ですか?
g++ではコンパイルがとおりませんでした。

//以下コード
struct C
{
C(){cout << "C" << endl;}
~C(){cout << "~C" << endl;}
};

int main()
{
C c;
new(&c) C;
c.~c();
}
//以上コード

//以下出力
C
C
~C
~C
//以上出力
0086困りましたNGNG
VC6 で、最頻値の平均を計算するテンプレート関数を作りました。

/**
 *  Calculate average of mode elements (most frequently appearing elements).
 *  @param  cont    Container of numeric values.
 *  @return         Mode average.
 */
template<typename Cont>
Cont::value_type ModeAverage(const Cont& cont)
{
    typedef map<Cont::value_type, int>  ValueCounter;
    ValueCounter counter;

    // Count up value furequency and get max frequency.
    int maxFreq = 0;
    {
        Cont::const_iterator it;
        for (it = cont.begin(); it != cont.end(); it++) {
            int& c = counter[*it];
            c += 1;
            maxFreq = MAX(maxFreq, c);
        }
    }
0087困りましたNGNG

    // Sum up container element of the max frequency.
    Cont::value_type sum = 0.0;
    int sumCount = 0;
    {
        ValueCounter::const_iterator it;
        for (it = counter.begin(); it != counter.end(); it++) {
            if ((*it).second == maxFreq) {
                sum += (*it).first;
                sumCount++;
            }
        }
    }

    return sum / sumCount;
}
0088困りましたNGNG

    // Sum up container element of the max frequency.
    Cont::value_type sum = 0.0;
    int sumCount = 0;
    {
        ValueCounter::const_iterator it;
        for (it = counter.begin(); it != counter.end(); it++) {
            if ((*it).second == maxFreq) {
                sum += (*it).first;
                sumCount++;
            }
        }
    }

    return sum / sumCount;
}
0089困りましたNGNG
ごめんなさい。2重送信してしまいました。。。
0090困りましたNGNG
上記の関数をテストする関数を書きました。

    // test ModeAverage
    {
        double data[10] = { 2.0, 1.0, 2.0, 5.0, 3.0, 4.0, 5.0, 2.0, 5.0, 4.0 };
        vector<double> v;
        for (int i = 0; i < 10; i++) {
            v.push_back(data[i]);
        }

        double ave = ModeAverage(v);
        double must = (2.0 + 5.0) / 2;
        ASSERT(DOUBLE_EQUAL(ave, must, 1.0e-100));
    }
0091困りましたNGNG
このテストが、アクセス違反を起こします。
原因は何が考えられるでしょうか?
0092デフォルトの名無しさんNGNG
ここは宿題スレじゃないよ
009391NGNG
すいません、
int& c = counter[*it];
の前に
if (counter.find(*it) == counter.end()) {
    counter.insert(ValueCounter::value_type(*it, 0));
}
を入れたら正常動作しました。

でもおかしいですね。
map の [ ] は自動的に要素を追加してくれるはずなのに。。。
0094デフォルトの名無しさんNGNG
cout<< (1==0)?'a':'b';

うんこ
0095RADENGNG
識者の方にお伺いをしたく思います。
スレ違いかもしれませんが・・・

VC++6.0でCreateFileでCOMポート開いて、通信速度を
1bpsに設定して、オシロスコープで波形観測してみますた。

本当は、通常のCOMポートって、デバイスマネージャ等で設定
できる値以外にどんな値がセットできるかを確認するうえでの
プログラムをしたのですが、幸い1bpsに関してもポート設定
ができましたもので、ならばこの糞遅いボーレートの観測を
してやろうと思いまして。

しかし、です。どうみても1秒間隔でビットが送られているように
みえません。送ったデータは&hAAで、ビット的に10101010となる
ものです。つまり、ハイ・ローの間隔が1秒毎にしたわけです。

擬似的に1bpsが実現していて、ハードウェア的に1bpsは実現して
なかったということでしょうか?
0096デフォルトの名無しさんNGNG
誤爆?
0097デフォルトの名無しさんNGNG
ネタ?
0098デフォルトの名無しさんNGNG
釣り?
0099デフォルトの名無しさんNGNG
結論:スレ違い。
0100デフォルトの名無しさんNGNG
自分で確保したメモリ領域に対して、あるクラスのコンストラクタをコールすることは出来ないのでしょうか?
0101デフォルトの名無しさんNGNG
>>100
placement new
0102100NGNG
>101
ありがとうございます。下記コードを試してみたところ、再定義されましたとエラーが出ました。
void* operator new(size_t size, void* p)
{
  return p;
}

どこかで定義されているだろうと思い、以下のテストコードを試してみましたが、エラーが出てしまいました。
・・・
 int i[32];
 int *pi = new(i) int;
}

環境はVisualC++2002です。何か根本的な間違いをしているのでしょうか?
0103100NGNG
自己解決しました。

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

が原因でした。お騒がせしました。
0104デフォルトの名無しさんNGNG
今プログラミング言語C++の例外処理のところを読んでいたら
explicit auto_ptr (X* p = 0) throw() { ptr=p; }
という記述が出てきたのですが、このthrow()とはどういう意味なのでしょうか?

前後を読んでみても何も説明がないようなのですが。
0105デフォルトの名無しさんNGNG
「例外を投げるかもしれない関数です」という意味です
0106デフォルトの名無しさんNGNG
>>105
P440に書いてありました。
ありがとうございました。
0107デフォルトの名無しさんNGNG
>>105-106
オイオイ
0108デフォルトの名無しさんNGNG
>>105
知ったか厨は氏ね!
0109デフォルトの名無しさんNGNG
throw(e1, e2) は e1 , e2 型、それから派生した型のどれかが投げられる可能性があるという意味
なにも例外を投げない時は throw() と書く
0110デフォルトの名無しさんNGNG
可能性で言い出したら、
std::exceptionとその派生がスローする可能性をどう扱うべきなのかと言う点で
ザルのような仕様だよね。
0111デフォルトの名無しさんNGNG
一つのクラスが記述されたcppファイルがただいま251KBなのですが、
これってどうでしょう、大きすぎますか?

一応コンポジット関係にあったクラスすら、他のファイルに切り分けたのですが
それでもこの結果です。

些末ですし、普段ならさほど気にならないのですが、
オープンソースにしなければで・・・恥かきたくないなぁ。
0112デフォルトの名無しさんNGNG
いっそさっさとオープンにして、その判断を任せればいいんでは?
恥ったって、バージョン上がるごとに過去のソースは恥ずかしく思えるだろうし(たぶん)

むしろその恥を隠すために更新が滞らなくなれば尚更(・∀・)イイ
0113デフォルトの名無しさんNGNG
>>111
>112に激しく同意。
0114デフォルトの名無しさんNGNG
>>112-133

ぶっちゃけ開発放棄のためのオープンs…ゴッホゴッホ
確かに内容にもよりますし、中見ないことには判断出来ないですよね。
レスありがとうございました。
0115デフォルトの名無しさんNGNG
ブランクの何にも書いてないただのウィンドウを作ってみたところ、
一回目だけちゃんとえらーが出ずに窓が開けたんですが、
二回目以降はプロセスにとどまったまま開かず、数回コンパイル>ビルド
を繰り返したところ、
DebugLINK : fatal error LNK1168: cannot open Debug/Win.exe for writing
というメッセージでコンパイルすらできなくなり、そしてまたビルドしたら開かず、コンパイルはまたできるようになって。

一応ネットで模範のコードを2つと、本に書いてあったコード全部試してみて
同じ結果だったので、作り方に問題があるとは思えないけど。。。
プロセスを強制終了させてまたビルドし直しても、またプロセスに留まるだけ。。
これは仕様なの?
0116デフォルトの名無しさんNGNG
>>115
PostQuitMessageしてないと超予想
0117115NGNG
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{

case WM_CLOSE:

DestroyWindow(hWnd);

break;

case WM_DESTROY:

PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

こんな感じでPostQuitMessageしてるよ。
0118デフォルトの名無しさんNGNG
>>115
たぶん仕様です。
115が「そういう動作をするコード」を書いたので、C++コンパイラやらOSやらは
正しく仕様どおりにそういう動作をしている、ってこと。
0119デフォルトの名無しさんNGNG
C++は不特定多数で開発するオプソには不向き。
中心となる人が優れていて、最初の公開の段階で
ある程度見通しがいいものならいいんだけど。
0120デフォルトの名無しさんNGNG
じゃぁある程度見通しがたっていなくともC言語なら開発しやすいわけ?
0121デフォルトの名無しさんNGNG
>>120
クラス名とかメソッド名の名前付けのセンスがあわない時に泣きたくなる位じゃないかと思うがなぁ。
仕事ならなんとかなるけど、好きで作ってる物でかち合うと悲しいんだよなぁ。
0122デフォルトの名無しさんNGNG
ひととおり動くβ版ができてから公開ってのがいいかもね。
設計段階からオープンにするとたしかにしんどそう。
0123デフォルトの名無しさんNGNG
ぶっちゃけ、オープンソースで開発しようったってコード書くやつなんか
限られてる。特に動かないうちなんか興味を持たれることすらまずない。
逆に動かないものを公開するとそれっきりになる危険すらある。

なので、>>122に賛成。

設計から付き合うやつなんて、まずいないって。
0124デフォルトの名無しさんNGNG
>>123
まぁ、知合い同士でわいわいする為のネタ。
0125デフォルトの名無しさんNGNG
よく、クラスで演算子を定義する時には、
「+」の処理で、あらかじめ実装しておいた「+=」を使えばいいとか聞くけど、
なぜ「+=」の処理で「+」を使うようにしないの?
「+=」は、「a=a+b」を「a+=b」という風に簡略化して書くためにあるものだから、
「+」を先に実装するもんだと思うんだが……。
別におかしいと言ってるわけじゃないんだけど、何か理由があるのかと気になる。
0126デフォルトの名無しさんNGNG
+=は代入先のオブジェクトがあるので、テンポラリオブジェクトなしで
演算を終えることができるため。
0127125NGNG
>>126
早い……。
ありがとう。
0128ほんたまNGNG
プログラマーのみなさん、教えてください。
ひとつのオブジェクトを2つに分裂させるコードを書きたいのですが、どう書けばいいのですか?
擬似的に2つに分裂したように見えるのではなくて、実際に2つに分裂するコードを書きたいのです。
つまり1つから2つのオブジェクトが同時に発生し、2つのオブジェクトの発生にはほんの少しの時間差もないという、事実上の分裂を書きたいのですが…
0129デフォルトの名無しさんNGNG
↓何事もなかったかのようにC++相談室をお送りします。
0130デフォルトの名無しさんNGNG
点のリスト PointList を作りました。

struct Point {
  double x, y, z;
}
typedef vector<Point> PointList;

ここで PointList 内の点を列挙することは簡単です。
イテレータを使えばいいです。

PointList points = ...;
PointList::const_iterator it;
for (it = points.begin(); it != points.end(); it++) { ... }

では、PointList 内の x 座標を列挙するするイテレータを
作るにはどうしたらよいでしょうか?
列挙するだけであれば、点を列挙して .x をとればいいですが、
x だけを列挙するイテレータがほしいのです。

x_iterator it = ...;
double x = *it;

このようなイテレータを簡単に作ることはできるでしょか?
イテレータ クラスを自分で書くしかないですか?
0131デフォルトの名無しさんNGNG
PointList::const_iterator it;

... it->x ...
0132デフォルトの名無しさんNGNG
boostのiterator_adaptorでも使えば?
0133デフォルトの名無しさんNGNG
ありがとうございます。やっぱり boost ですか。
これぐらいは C++ 標準で用意してほしいですよね。
0134デフォルトの名無しさんNGNG
>>133
文句はC++標準化委員会に言って下さい。
ここはお前の日記じゃねーんだ。
0135デフォルトの名無しさんNGNG
技術的に反論できねーカスがスレの存在意義を否定してるんじゃねえよ (プ
0136デフォルトの名無しさんNGNG
>>135
負け惜しみか?氏ねば?
0137デフォルトの名無しさんNGNG
>>136
あ? 何だお前、それで勝負でもしてたつもりだったのか? (プゲラ
0138デフォルトの名無しさんNGNG
>>137
それで技術的な反論のつもりですか?
「はい」ならあなたは完璧に負け犬、「いいえ」なら頭の悪い厨確定ですね ;-)
0139デフォルトの名無しさんNGNG
冬厨が湧くにはまだ少し早いと思うのだが。
0140デフォルトの名無しさんNGNG
┌───────────────────┐
|致命的なエラー                [×]|
├───────────────────┤
|質問者は致命的なエラーを抱えています。  |
|                             .|
|スルーしますか?                  |
|     [ はい(Y) ] [ いいえ(N) ]        |
└───────────────────┘
0141デフォルトの名無しさんNGNG
秋は唯一厨の沸かない季節だと誰が決めたんだろう
0142デフォルトの名無しさんNGNG
>>138
お前の脳内で確定されても痛くもかゆくもない
スコープの概念が見えてないアフォが煽ったつもりらしいがw
0143デフォルトの名無しさんNGNG
マジレスで失礼するが、
そう口論は感情を抑えて早く離れるべき。
0144デフォルトの名無しさんNGNG
void myStrcpy( char* a, char* b){ while (*a++ = *b++) ; }

これで、++は、何を増加させてるのですか?
a,bはCharだから、アスキーコードを考えて、アルファベットが一文字ずつ上がっていくってこと?
この関数もBodyって、whileの部分だけだよね?
ってことは、これ、いつこのループは、終わるんでしょう。。。
0145デフォルトの名無しさんNGNG
ポインタの勉強しろ。それで解決する。
0146デフォルトの名無しさんNGNG
>>144
++はデリファレンスよりも優先順位が高いから、
*a++ は *(a++) と同じ。
ポインタをインクリメントしてから参照してる。
(後置だから参照してからインクリメントが正しいか)
文字列の終端に来たら *a == 0になってループを抜ける
0147デフォルトの名無しさんNGNG
>>144
Cスレ逝けよ。C厨の方がポインタをずっと親切に教えてくれるから。
0148デフォルトの名無しさんNGNG
だって a++,b++,!C++ だもんね!
0149デフォルトの名無しさんNGNG
>>147
唐突に別の言語の話をはじめて ( ゚д゚)ポカーン されるJ厨等と同類
0150デフォルトの名無しさんNGNG
>>149
( ゚Д゚)ハァ?C++だから当然Cのポインタも含んでいるけど、
>>144の質問はどう考えてもCのスレの方がお似合いだろ。
空気読め池沼。
0151デフォルトの名無しさんNGNG
>>150
思いこみの激しい人だな。
C は別の言語だ。 C++ じゃない。
似ていようがいまいが、それはあくまで与太話でしかない。
ここはム板だ。技術的な話はドライなスタンスが基本であることは言うまでもない。
0152デフォルトの名無しさんNGNG
>>151
じゃあCがC++と「別の」言語だと捉えている貴方に質問しますが、>>144の
質問はC++で常に答えてやった方がいいと思うのか?
>>146==>>151だと思うが、別に>>146を俺は叩いたつもりは無いはずだが、
もしかして被害妄想か?
0153デフォルトの名無しさんNGNG
>>152
俺は 151 だが 146 ではない。

いいもへったくれもない。
単に C++ の話であり、他のどの言語の話でもない。
0154デフォルトの名無しさんNGNG
>>153は池沼。
単なるchar型へのポインタの話でさえCとC++は全く違っていて、互換性の
ある説明は出来ないと思いこんでいるバカ。
0155デフォルトの名無しさんNGNG
>>154
C++ のポインタについて聞いている人に C のポインタの答えをするトンマが泣いてるよ
0156デフォルトの名無しさんNGNG
もちろんCスレに行けば適切に答えてくれるだろうが、
正しいC++の質問をわざわざ誘導するのはどうかと思うぞ。
0157デフォルトの名無しさんNGNG
>>155
もういいよ。アホの相手をするのは疲れた。
0158デフォルトの名無しさんNGNG
>>156
そしたらCの質問をあたかもC++の質問のようにする厨が多量に流入しても
お前は答えてやるつもりなんだな!?そしたらもうC専用スレの存在意義が
(100%ではないが95%ほどは)なくなるね。
0159デフォルトの名無しさんNGNG
>>155
いちいちageんなウゼえ
0160デフォルトの名無しさんNGNG
>>158
ほう、>>144 がそうだとでも言う気かよ
0161デフォルトの名無しさんNGNG
>>160
釣りなら海に行ってしてくれ。今日は天気が悪いから釣れないだろうがな
0162デフォルトの名無しさんNGNG
>>158
最初にそう断ってからから誘導すれば、荒れずにすんだと思われることが多々ある。
0163デフォルトの名無しさんNGNG
>>158
>そしたらCの質問をあたかもC++の質問のようにする厨が多量に流入しても
>お前は答えてやるつもりなんだな!?
Cの質問かC++の質問か区別できない場合には、そうする。

>そしたらもうC専用スレの存在意義が
>(100%ではないが95%ほどは)なくなるね。
そうか?いずれC++を学ぶにしてもCから始める
学習者は多いと思うが。

本人がC++を学んでいるつもりであれば、C++スレに質問するだろう。
そういう場合に、内容がCと重複しているからといって、Cスレに誘導するのは、
独立した言語のスレとしてどうなんだろう、といいたい。
0164デフォルトの名無しさんNGNG
>>163
>そうか?いずれC++を学ぶにしてもCから始める
>学習者は多いと思うが。

だったらなおさらの事、CとC++で重複している質問はCスレへ誘導してやれよ。
このスレの過密化を防ぐためにわざわざ独立スレとして立ててるんだろ。
0165デフォルトの名無しさんNGNG
>>162
それぐらいは空気読んでわからんか?頭が悪いね。
0166デフォルトの名無しさんNGNG
>>144
当分の間はこれと同じことをしていると思えばいい。
void myStrcpy(char* a, char* b) {
 while (1) {
  *a = *b;
  if (*a == '\0')
   return;
  a++;
  b++;
 }
}
0167デフォルトの名無しさんNGNG
>>144
void myStrcpy( char* a, char* b){ while (*a++ = *b++) ; }
↓
void myStrcpy( char* a, char* b){ do { *a = *b; a++; b++; } while (*a) ; }

このスレは池沼の住処だから、これ以上のことはCスレで訊きんしゃい。
ちなみにこのコードは空文字が与えられた時の挙動がダメダメってことと
>>144 もすぐに挙動が分からなかったように可読性も悪いコードとして
有名だから真似はせんようにね。
0168デフォルトの名無しさんNGNG
>>167
>このコードは空文字が与えられた時の挙動がダメダメ
下のほうのことだよね?
0169デフォルトの名無しさんNGNG
この++って、*aと*bが格納されてる場所のアドレスが増えてるってことだよね?
つまり、Bodyにカウントをつけたとしたら、
最初与えられたアドレスから連続していくつ、そのメモリが使われてるか分かるってこと?
0170デフォルトの名無しさんNGNG
>>169
Cスレ逝け池沼
0171デフォルトの名無しさんNGNG
>>167
アホでたー
0172デフォルトの名無しさんNGNG
>>169
そうじゃなくて*a = *b;を行っているから文字列のコピーだよ。関数名見ろ。
0173144NGNG
このスレには>>167みたいな低脳しかいないのですか?
0174デフォルトの名無しさんNGNG
167はいつもCスレを荒らしているC++厨
0175デフォルトの名無しさんNGNG
>>167
めっちゃ恥ずかしいなお前。人の事を池沼呼ばわりしておいて、
自分が池沼と言われても仕方ないようなレス書いて。
0176デフォルトの名無しさんNGNG
>175
>めっちゃ恥ずかしいなお前。人の事を池沼呼ばわりしておいて、
>自分が池沼と言われても仕方ないようなレス書いて。

池沼の住処とは自分の事を指していたのでは?
0177デフォルトの名無しさんNGNG
池沼って誰のことですか。
0178デフォルトの名無しさんNGNG
144=167のこと。
0179デフォルトの名無しさんNGNG
>このスレの過密化を防ぐためにわざわざ独立スレとして立ててるんだろ。

これは初耳
0180デフォルトの名無しさんNGNG
166さんありがとう。
当分の間はこれと同じことをしていると思えばいい。
void myStrcpy(char* a, char* b) {
 while (1) {
  *a = *b;
  if (*a == '\0')
   return;
  a++;
  b++;
 }
}


if (*a == '\0')って、if (*a == '\0'||*b == '\0')じゃなくて?
0181デフォルトの名無しさんNGNG
*b++は何を表してる?って聞かれたら。。。
低脳なの、承知です。
プログラム初めてなもので・・・。
すいません。
0182デフォルトの名無しさんNGNG
池沼・・・
0183デフォルトの名無しさんNGNG
>>181
*a に *b を代入しているので、片方を0と比較すればもう片方はその必要がない。
0184デフォルトの名無しさんNGNG
質問です。
arrayに入ってる中身の順序を逆さに並び替えたいんだけど、
追加のstrageなしでってことで、XORを使おうとしてるんだけど、
XORがいまいち、よく分からないのです。
reverseOrder(array[]);の定義なのですが・・・。
0185デフォルトの名無しさんNGNG
必殺!「いまいちよく分からない」!
0186デフォルトの名無しさんNGNG
184です。解決しました。
0187デフォルトの名無しさんNGNG
お前の言いたいことがよくわからんが、逆さはとりあえずこれで出来るぞ

#include <algorithm>

const int N = 10;
int array[N];

std::reverse(&array[0],&array[N]);
0188デフォルトの名無しさんNGNG
「C++の前にCを学ぶべきか」っていうスレが必要だな
0189デフォルトの名無しさんNGNG
>>184
宿題スレで聞いたほうがいいと思う。
なぜなら質問点を明確にできていないから。

(xor について独り言)
神話に出てくる大先生の本にさえ「驚くべき」とか書いてあることを
ノーヒントで放り出す教授の意図はいったい・・・

大学の存在意義がここにあるわけだが
0190デフォルトの名無しさんNGNG
>>189
もったいつけずに言いたいことを言ってくれ。
0191デフォルトの名無しさんNGNG
どうせ「トリッキーなコード その2」の44だろ?
0192デフォルトの名無しさんNGNG
要は初心者レベルの質問は
宿題スレか初心者スレに逝けってことだ

ぼるじょあがC/C++の宿題を片付けますYO! 35代目
http://pc5.2ch.net/test/read.cgi/tech/1101568895/l50
【初心者歓迎】C/C++室 Ver.12【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1101100031/l50

>>144だの>>184だのこのスレで扱う話題じゃない。
0193伊能四郎NGNG
どうもです。
0194デフォルトの名無しさんNGNG
ズン!!
0195デフォルトの名無しさんNGNG
1 "hogehoge" "hage" 123 //int 文字列 文字列 int
2 "hige hige" 456       //int 文字列 int
3 "hegehege" "hage" 789 //int 文字列 文字列 int

こういう既存のtxtファイルがあるのですが、1や3の様にhageてる場合と
2の様にhageが無い場合があるんです。
STLでこれを、区別して読むにはどうすれば良いのでしょうか。

またhige higeの様に間にスペースが入ってしまう時にも
""内を一息に読み込む方法はあるのでしょうか。
いまは終端の"が無ければ一回読み込み、結局strcatで連結しています。
0196195NGNG
書き忘れすいません
hageは例でして、必ずhageという文字列とは限らないんです
0197デフォルトの名無しさんNGNG
>>195
それはSTLの問題ではないだろ。
読み込みパーザを書きなさい。
0198デフォルトの名無しさんNGNG
>>195
STL?std::ostream_iteratorでも使うって意味か?
std::ifstreamの間違いじゃないの?
0199195NGNG
しまったSTLは取り消します。仰るとおりstd::fstreamです。

あるいは読み込み区切り文字を変えたりして
簡単に出来ないかなと思ったのですが、やはりこの辺は細かくやらなきゃなんですか。

となるとあまり恩恵も感じられないし、、
fgetsに戻りたくなりますねぇ。レスサンクスでした。
0200デフォルトの名無しさんNGNG
std::getline()で一行をstd::stringに読み込み、それをstd::stringstreamに
ぶち込んで、1や3を前提として読んで、エラーが起きればclear()して
seekg()で先頭に戻し、2を前提で読み込む。
0201195NGNG
>>200
ありがとうございます。
そうかそこだけ別streamに取って無理矢理エラーを出させれば良いのか。
感謝です。
0202デフォルトの名無しさんNGNG
while(getline(ifs,line)){
escaped_list_separator<char> sep(''\\,' ');
tokenizer<escaped_list_separator<char> > tok(line,sep);
tokenizer<escaped_list_separator<char> >::iterator it = tok.begin();
・・・
}
0203デフォルトの名無しさんNGNG
正規表現で一番速いライブラリはどれだと思う?
0204デフォルトの名無しさんNGNG
pcre
0205デフォルトの名無しさんNGNG
boost::regex は?
0206デフォルトの名無しさんNGNG
今読んでる本に組み込み型ってあったんですけど、
これって std::complex 等標準クラスも含まれるんですか?
それとも int, char long 等だけですか?
0207デフォルトの名無しさんNGNG
C++の場合はPODと言った方がいいかもな。
0208デフォルトの名無しさんNGNG
質問ですunsorted list(ソートされないリスト)で
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃  ┃  ┃
┗━┻━┻━┻━┻━┻━┛
と配列が渡されたとき、「75」を挿入すると

┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃75┃  ┃
┗━┻━┻━┻━┻━┻━┛
となるので正しいですか??

また、
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃  ┃  ┃
┗━┻━┻━┻━┻━┻━┛
から53を削除した場合、リストはどの様に並びますか?
よろしくおねがいしますm(_ _"m)
0209デフォルトの名無しさんNGNG
>>208
unsorted listでは何を指すかわからない。もっと具体的に書こう。
もし、std::listならば、>>208で正しい。
単に削除と書かず、具体的に実行した関数(erase()など)を添えよう。
0210デフォルトの名無しさんNGNG
>>208
マルチうざい。
0211デフォルトの名無しさんNGNG
>>206
std::complex<>は標準ライブラリによって定義されているので
組み込み型とは言わない。
組み込み型とは、言語によって定義されている、bool, int, char,...の事。

>>207
PODはまた別の概念。たとえば
struct point{int x,y;};
はPODだが組み込み型ではない。
0212デフォルトの名無しさんNGNG
PODって英語で言うと何の略だっけ?
いや意味は分かるんだけど、英単語がどれか迷う
ネタフリじゃないよ
0213デフォルトの名無しさんNGNG
Plain Old Dataじゃなかったか
0214デフォルトの名無しさんNGNG
>>213
おおサンクス!胸のつかえが取れたよ
よもやネタ無しでレス頂けるとは
0215デフォルトの名無しさんNGNG
上島竜平が「絶対に押すんじゃないぞ」と言っていたら、
本当に押されなかった様な哀愁を感じる
0216デフォルトの名無しさんNGNG
意地が悪いな(w
0217デフォルトの名無しさんNGNG
あるクラスのメンバ関数を(明示的に)インライン化しようと思って
定義をソースファイルからヘッダに移したのですが、
その関数の中で使われているクラスが"認識できない型"と言われ
コンパイルできなくなってしまいました。
明示的インライン化を行うときは何か特別な手続きが必要なのでしょうか?
0218デフォルトの名無しさんNGNG
age
0219デフォルトの名無しさんNGNG
>>217
include してる?
0220デフォルトの名無しさんNGNG
>>219
はい、さすがにincludeはしてます
0221デフォルトの名無しさんNGNG
>>220
あやしい…
ソースファイルでincludeしたもの全部インクルードしてもそうなる?
0222デフォルトの名無しさんNGNG
ソース見ないとワカラン
0223デフォルトの名無しさんNGNG
ソースはこんな感じです
(改行が多いといわれたのでメンバ変数を省略しました)
GetEdgeToのなかでEdgeクラスが見つからないと言われてしまいます

#include "CommonInclude.h"
#include <list>
#include "boost/numeric/ublas/vector.hpp"
#include "Edge.h"
using namespace std;
class Edge;
class Vertex
{
public:
Edge *GetEdgeTo(Vertex *vertex);
protected:
void SetPoint(vector<precision> *point) {this->point = point;}
void SetEdgeList(list<Edge> *edgeList) {this->edgeList = edgeList;}
private:
list<Edge> *edgeList;
};
inline
Edge *Vertex::GetEdgeTo(Vertex *vertex)
{
for (list<Edge>::iterator itr = edgeList->begin(); itr != edgeList->end(); itr++) {
Vertex *head = (*itr).GetHead();
if (head == vertex)
return &*itr;
}
return NULL;
}
0224デフォルトの名無しさんNGNG
>>223
Edge.hの中でEdgeクラスが定義されてるなら
class Edge; ←これを消してみれば
0225デフォルトの名無しさんNGNG
additional storage 使わないでスワップするときって、int型ならXOR使ってっていうのは、
分かったんだけど、doubleとか char の場合ってどうするか分かりますか?
0226217NGNG
>>224
Edge.hの中でVertexクラスを使っているので
それをとってしまうと循環参照がうまく解決されないのです
0227デフォルトの名無しさんNGNG
>>226
ならinlineは無理
0228217NGNG
>>227
そういうものなんですか・・・
それってどの辺を調べれば出てきますか?
0229デフォルトの名無しさんNGNG
1クラス1ファイルという馬鹿げた習慣をやめる
0230デフォルトの名無しさんNGNG
>>223
// a.h
#ifndef A_H
#define A_H
class B;
class A {B *mv; void mf();};
#include "B.h"
inline void A::mf() {B b;}
#endif
//b.h
#ifndef B_H
#define B_H
class A;
class B {A *mv; void mf();};
#include "A.h"
inline void B::mf() {A a;}
#endif
0231デフォルトの名無しさんNGNG
>>226
>Edge.hの中でVertexクラスを使っているので
どういうコード書こうとしているのかによりますけれど,普通edgeにはvertexを
指す機能だけを持たせればよいのですから,Edgeが必要とするのは
Vertex *(またはそれと同等なもの)だけで,その場合Edgeから見えるべきなのは
Vertexの前方宣言だけで良いと思うのですが.

あと根本的な話として,Boostを使っているならBoost.Graphを見てみてはどうですか?
0232デフォルトの名無しさんNGNG
UNIXじゃC++はバッチ処理にしか使われてないって本当?
0233デフォルトの名無しさんNGNG
バッチ処理に使われているのはRuby
C++なんて問題外^^;;;
0234デフォルトの名無しさんNGNG
そうですか、やっぱりRubyを勉強することにします。
ありがとうございました。
0235デフォルトの名無しさんNGNG
ちょっと待って!
ソフトウェアの規模によって違うよ。 Ruby > Perl > awk かな??
0236デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> awk >>>>>>>>>>>>>>>>>>>>> sed >>>>>Perl
0237デフォルトの名無しさんNGNG
何でそんなに比較したがるの?
0238デフォルトの名無しさんNGNG
Rubyが優れた言語であることは否定のしようがない事実。
そのことを皆が分かるまで続けます。
0239デフォルトの名無しさんNGNG
Pe = ぺ・ヨンジュン
0240デフォルトの名無しさんNGNG
>>237
どれもスクリプティング言語だから、それぞれの特徴にあった使い分けをする必要がある。
もし、それをしなかったら世の中に一つの言語しかなくなるよ。
そして、>>235は各言語に向いている開発規模を比較したものであり、言語の優劣を
比較したものではない。
0241デフォルトの名無しさんNGNG
Perlだけは許せない。
0242デフォルトの名無しさんNGNG
>>238
自己記述可能な処理系になってから言って下さい
0243デフォルトの名無しさんNGNG
最近のUNIXではPerlは入ってないよ。
既にRubyに完全に取って代わられました。
0244デフォルトの名無しさんNGNG
UNIX板にRubyのスレはありますがPerlのはありませんね。
それが全てを物語っています。
自分もPerlは削除しました。
0245デフォルトの名無しさんNGNG
Perlerはクズみたいな連中だからwebprogにでも行けばいいのに。
なに大きな顔してム板にいるのやら。
CGIと混同されるぐらいしか脳のないセンス0の糞言語が。
0246デフォルトの名無しさんNGNG
C++も糞。
Ruby作者のmatz氏のお言葉をよく聞け。

http://web.archive.org/web/20000302001334/http://www.ruby-lang.org/ja/compar.html

C++
いろいろと有名なオブジェクト指向言語であるC++とRubyを比較すると:


C++なぞ問題外.^^;;;

http://web.archive.org/web/20000302001334/http://www.ruby-lang.org/en/compar.html

C++
C++ is famous OOPL in many places. Now, let's compare C++ with Ruby:


Ruby is too good to compare ;-)
0247デフォルトの名無しさんNGNG
なぜLispと比較しないのか
0248デフォルトの名無しさんNGNG
Rubyの欠点は速度かな
0249デフォルトの名無しさんNGNG
Rubyの欠点は名前のせいでPerlと何か関係があるかのように信じている人が多いこと。
RubyはPerlより先に生まれ、独自に発展した言語。
Perlを参考にしたこともなければその格からして違う。
0250デフォルトの名無しさんNGNG
南京大虐殺なみの捏造ですね
0251デフォルトの名無しさんNGNG
たかが宣伝のためのリップサービスをまともに受け取っている馬鹿がいる。
RubyはPerlと全く関係がない。作者自身がそれを明言している。
0252デフォルトの名無しさんNGNG
ここが C++ スレだということを忘れそうになる惨状だな……
0253マイク ◆yrBrqfF1Ew NGNG
>>240
使い分ける必要はないな。
好きな言語を作る自由があるから沢山言語があるだけだ。
0254デフォルトの名無しさんNGNG
Rubyが大好きだということはわかったから、連投はやめれ
0255デフォルトの名無しさんNGNG
C++がRubyよりはるかに劣った存在であるということもご理解いただけましたか?
0256デフォルトの名無しさんNGNG
Ruby使ってるとキチガイになるということがよく分かった。
0257デフォルトの名無しさんNGNG
matz氏がイカレポンチであると再認識した
0258デフォルトの名無しさんNGNG
JISX3014が閲覧可能。日本語版のANSI/ISO14882:2003のようなもんだな。
http://www.jisc.go.jp/app/pager?id=120287
0259デフォルトの名無しさんNGNG
げっ、こいつ一丁前にreferrer見てやがる。
トップページから、JIS検索→X3014とやって見てくれ。
http://www.jisc.go.jp/
0260デフォルトの名無しさんNGNG
JISのPDFは画像データだから検索が出来ないんだよな…
0261デフォルトの名無しさんNGNG
>>260
できないね。糞だわ。でもタダだし一応取っておいて損はない鴨。
0262デフォルトの名無しさんNGNG
その点ドキュメントの充実しているRubyとは違うね。
0263デフォルトの名無しさんNGNG
質問です。

何らかのタイプ設定をenumでセットするクラスがあるとすると、通常はこういう構成になると思います。

class Hoge{
public:
  enum TYPE {A,B,C};
  Set(TYPE type);
private:
  TYPE type_;
};

Hoge hoge; hoge.Set(Hoge::A); hoge.Set(Hoge::B); hoge.Set(Hoge::C);

Setを呼び出すたびにHoge::という修飾が必要なのがわずらわしいので、
以下のように名前空間を利用できないだろうかと考えています。
なお、名前空間名は必ずクラス名をすべて大文字にしたもの、で統一するつもりです。

namespace HOGE { enum TYPE {A,B,C}; }
class Hoge{
public:
  Set(HOGE::TYPE type);
private:
  HOGE::TYPE type_;
};

using namespace HOGE; Hoge hoge; hoge.Set(A); hoge.Set(B); hoge.Set(C);

クラス利用者がusingディレクティブによって必要に応じて冗長な修飾を
削れるため、後者のほうが、優れた手法だと思っています。
なにか見落としている欠点などありますでしょうか?
0264デフォルトの名無しさんNGNG
>>263
他の同じようなクラスで、enum TYPE {A, B, C};のようなことができない。
例えば、class Hageでも同じようなenumがあったとして、
名前空間を使わなければhoge.Set(Hoge::A) と hage.Set(Hage::A) で使い分けられる。
名前がぶつからないようにHageの方ではAを使わないようにするくらいなら、
初めからenumをclass内に閉じ込める必要ないと思う。
0265デフォルトの名無しさんNGNG
class Hoge{
public:
    SetHogeA();
    SetHogeB();
    SetHogeC();
};
にしとけば利用者の手間は一番減る
0266デフォルトの名無しさんNGNG
>>264
>名前空間を使わなければhoge.Set(Hoge::A) と hage.Set(Hage::A) で使い分けられる。
名前空間を使っても使い分けられるよ
0267デフォルトの名無しさんNGNG
template<class Foo>
class Hoge {...}
という場合、Hoge は「テンプレート クラス」ですが、
Foo はなんと呼べばよいでしょうか?
0268デフォルトの名無しさんNGNG
>>267
テンプレート引数。
実際に渡される実引数と区別するなら仮引数。
intなどの非型引数と区別するなら型引数。

ちなみに、Hogeは規格中の言葉の「クラステンプレート」のほうをお勧めしたい。
0269263NGNG
>>264
すでに>>266さんが指摘されてますが、名前空間でもその点は問題ありません。
ちなみにEfffective C++の28項に解説してあります。

>>265
なるほど、つまりこうですね。

class Hoge{
public:
  void SetTypeA(void){Set(A);}
  void SetTypeB(void){Set(B);}
  void SetTypeC(void){Set(C);}
protected:
  enum TYPE {A,B,C};
  Set(TYPE type);
private:
  TYPE type_;
};

インラインだから余計なコストもおそらくないし、全部クラス内に収まってるし、
enumの範囲チェックも不要になるしで、どうもこれがベストの手法に思えます。
ありがとうございました。

>>267
ついでの横レスですが、
×テンプレートクラス
○クラステンプレート
だったはずですよ。
0270デフォルトの名無しさんNGNG
>>258
前まで売ってたやつですか?
次回からテンプレ追加ですね。しかし混んでいるのか落とせねぇ
0271デフォルトの名無しさんNGNG
常に定数しか引数にしないのか?
0272デフォルトの名無しさんNGNG
float型やdouble型に対する
% 演算子的な標準関数または手法ってあるんでしょうか?

なければ作るまでですが、自分で変なの拵えるよりはと。
0273デフォルトの名無しさんNGNG
fmod
0274デフォルトの名無しさんNGNG
>>273
即レスありがとうございました。助かりました。
0275267NGNG
>>268 >>269 ありがとうございます。
クラス テンプレート、テンプレート引数、ですか。

あともう一つ呼び名が分からないのですが、
クラス テンプレートのテンプレート引数として指定するクラスの
シグニチャのことを何と呼ぶのでしょうか?

たとえば、
template<class Junk, class Food>
class JunkFood {...};

となっていて、Junk と Food には、
ある種のプロトタイプのメンバ関数が必ず必要とします。
このような場合、私はダミークラスを定義しているのですが、

// 実装のないシグニチャだけのクラス
class JunkTempl {
void Weight(void);
double Value(void);
};

このような JunkTempl を一般になんと呼ぶのでしょうか?
0276デフォルトの名無しさんNGNG
インターフェースクラス
0277デフォルトの名無しさんNGNG
クラスインターフェースか(´・ω・`)
しかも微妙に違ってるorz
0278ネムーNGNG
forループの中に、計算データを保存するプログラムを書いて、
10ループ毎に計算データを保存するというような事はできるんでしょうか?

ファイル名をループ毎に自動で指定させる事ができなくて困っています。
bccを使っています。
わかる方教えてください。よろしくお願いします。
0279デフォルトの名無しさんNGNG
>>278
std::stringstream
0280デフォルトの名無しさんNGNG
>>278
単なる一例ですが。

#include <iostream>
#include <sstream>
#include <string>

int main()
{
for (int i = 0; i < 100; i++)
if ((i % 10) == 0) {
std::string s;
std::stringstream str(s);

str << "filename" << i / 10;
std::cout << str.str() << std::endl;
}
}
0281デフォルトの名無しさんNGNG
>>261
思いっきりナメられてるな
OCR 書ける香具師はこんなの見ねえってさw
0282デフォルトの名無しさんNGNG
ウインドウモードの時、指定した画面サイズ(W,H)から周りの枠線やタイトルバーを除いた幅と高さはどうやって求めればいいのですか?
0283デフォルトの名無しさんNGNG
スレ違い
0284282NGNG
ん?C++スレの質問ですよね?
間違っていないと思うんですが、一体どこで質問しろとorz
0285デフォルトの名無しさんNGNG
ウィンドウ(GUI)が出てくる時点で標準C++の規格外。
WindowsならAPIスレなりMFCスレに逝くべし。
0286デフォルトの名無しさんNGNG
>>284
このスレは機種に依存しない話題だけをメインに扱っている。
多分Win32APIかどこかで聞いた方がいい。
0287デフォルトの名無しさんNGNG
どこが適切な場所かわからないなら環境依存OKスレで聞いとけ。
0288デフォルトの名無しさんNGNG
それを言うならこっちだろ
http://pc5.2ch.net/test/read.cgi/tech/1100963189/
0289282NGNG
そうなんですか、知らなかった・・・ソウイウダイジナコトハテンプレニイレテテクダサイヨorz
VBでは領域を調べることができるのでC(++)でもできるのかと思ってました。
>>288
なんかこれもスレ違いな気がするけど行ってきます(´`)>
0290デフォルトの名無しさんNGNG
iteratorを扱う関数って、NULLチェックとend()チェックしないとダメなの?
void f(T::iterator i) { 
  if (i && i->ptr) { 
    x = i->ptr->data; 
  } 
} 
もっと簡単にできる?
0291デフォルトの名無しさんNGNG
C++はマイクロソフトの商品名じゃねぇぞ。アフォ。
0292デフォルトの名無しさんNGNG
まちがえた。
void f(T::iterator i) { 
  if (i && i != c.end() {
    x = i->data; 
  } 
} 
0293デフォルトの名無しさんNGNG
このスレでたまに初心者を煽ってる人いるんだが、
本来、C++プログラマってあんまり劣等感に満ち溢れた奴って少ないだろ?
会社などでも比較的優秀な人材をC/C++に配属するしさ。

でありながら、>>291のように誹謗の機会をうかがう哀れな負け組がこのスレにくるのは何故だろう・・・?
会社の研修でC/C++をやらされたが会社側に事実上のダメ出しされたために屈折してしまった馬鹿が
Cプログラマを装ってスレを荒らしているのではないか?

私の知ってるCプログラマは、皆、温厚で忍耐強いがなぁ。
私は、短気なCプログラマに出会ったことがない。
0294デフォルトの名無しさんNGNG
iteratorの有効性なんぞ呼び出し側に保証させとけ
0295デフォルトの名無しさんNGNG
Dプログラマだから
0296デフォルトの名無しさんNGNG
Dプログラマは所詮お遊び。仕事には使えない。
0297270NGNG
クッキー切ってたorz
0298デフォルトの名無しさんNGNG
GNU次第
0299デフォルトの名無しさんNGNG
>>293
>私の知ってるCプログラマは、皆、温厚で忍耐強いがなぁ。

お前はそいつらの何を知ってる?全部を知り尽くしてるのか?
表で温厚で忍耐強くがんばってる分、抑圧されたストレスも他の人より多いだろう。
0300デフォルトの名無しさんNGNG
つうかそもそも >>282 のことぐらいググるなり、MSDN検索するなりして自分で調べろ、と思うんだが。
0301デフォルトの名無しさんNGNG
>>299
> 表で温厚で忍耐強くがんばってる分、抑圧されたストレスも他の人より多いだろう。
お前はそいつらの何を知ってる?全部を知り尽くしてるのか?
0302デフォルトの名無しさんNGNG
ostringstream o("aaa");

o << "bbb";
cout << o.str() << endl;

これを実行するとbbbとしか表示されないのですが
正しい挙動ですか?
aaabbbと表示されるのを期待していたのですが。
0303デフォルトの名無しさんNGNG
>>258
これローカルに落とせないの?
0304デフォルトの名無しさんNGNG
>>302
std::ostringstreamのコンストラクタは std:string を引数に取る。

従って、

std::ostringstrem o("aaa"); は、
std::ostingstream(std::string("ooo")); と同じ。

以降はこの一時stringオブジェクトに対して操作が行われる。
そして、最初の出力を実行した時、書き込みポインタはバッファの
先頭にあるため、"aaa"が"bbb"で上書きされる。

もし期待通りの結果を得たければ、先に o.seekp(3); としておかなければならない。
0305デフォルトの名無しさんNGNG
>>303
大きな声では言えないが、Temporary Internet Filesの中にあるはず。
これ以上は自分で考えろ。
0306デフォルトの名無しさんNGNG
>>304
ありがとうございました。
o.seekp(3);を挟んだらaaabbbと表示されました。

本にo << "aaa" << "bbb";を、>>303のように書くこともできる
と書いてあったので困惑してました。
0307デフォルトの名無しさんNGNG
>>306
ちなみに、それ、何て本?
0308デフォルトの名無しさんNGNG
>>307
プログラミング言語C++第3版です
0309デフォルトの名無しさんNGNG
>>304
std::stringstreamが取るのはconst std::string&だろ?
0310デフォルトの名無しさんNGNG
つか日本語訳なんていらんだろ
0311デフォルトの名無しさんNGNG
>>308
何章かな?
>>309
確かにそうだね。という事は バッファの中身をいじっても元の std::stringは
不変である事を保証しているのかな?謎だ・・・・
0312デフォルトの名無しさんNGNG
スマソ。>>304には間違いがありました。

std::stringstreamは独自の内部バッファを持ち、コンストラクタに取った
std::stringの中身は内部バッファにコピーされるんでした。だから
const std::string& なんだね。

しかし、書き込み/読み取りポインタがバッファの先頭にある事は変わり
ないので、書き込んだり読み取ったりすると、先頭から行われるのは
変わらない。
0313デフォルトの名無しさんNGNG
>>311
21.5.3の文字列ストリームの732ページ
>>280で知って、使ってみようとちょっと読んだだけなので
自分が間違ってるかも。
0314デフォルトの名無しさんNGNG
>>313
今読んでみたが、>>306のような事は書いてない。
ま、文字列ストリームは普通のファイルストリームと似たような感覚で
扱えばいいんじゃない?
0315デフォルトの名無しさんNGNG
今日本語訳の方ではなく、元の方のerrataを見たら
ostringstream o("aaa",ios_base::ate);
こんな風に直されてました。
0316デフォルトの名無しさんNGNG
>>315
それなら分かる。std::ios_base::ateは、ファイルを開いた後にファイルの最後に
移動するオープンモードフラグだから。
0317デフォルトの名無しさんNGNG
>>299,301
Cプログラマに外向的な性格の人は少ないでしょ。
ストレスを他者への攻撃に転化するタイプは少ないように思う。
ただし、あくまで人数が多い少ないの話であって2chを訪れる人の中には、
Cプログラマの適性がないにもかかわらず、
Cをやってるorやらされてる、迷惑な人が少ないながらもいるんだろう。

C/C++は古い言語ということもあって新しい言語よりも理不尽。
その理不尽さに耐えるだけの適性がないと、辛いわな。
0318デフォルトの名無しさんNGNG
>>303,305
>大きな声では言えないが、Temporary Internet Filesの中にあるはず。
>これ以上は自分で考えろ。
大きな声で言えないも何もkonquerorだと開くか保存するかを聞いて来るのだけど
これってローカルに入れちゃダメなの?
0319デフォルトの名無しさんNGNG
言語で性格がくくれると思っている人は、星座占いとか好きそうだな
0320318NGNG
>>319
私は、星座占いや血液型占いは全く信じないし、
TVの朝のニュース番組で占いが出てくると即、チャンネルを変える。
朝のバタバタした時間帯に占いを流すTV局が増えたのは実に情けないことだと思っている。
非科学的な分野が市民権を得ていることが情けない。

公共の電波は落書き帖じゃねーんだ。そういうことは毒電波専門チャンネルで流せ、な?(AA略)
と、心の中でツッコミを入れている次第である。
0321デフォルトの名無しさんNGNG
このコードを強引にコンパイルする方法はありますか?

struct Object
{
    static void static_hoge() {};
};
void Hoge()
{
    Object.static_hoge(); // この2行は、
    Object object; // 一切変更できない
}

例えば、
typedef Object* ObjectPtr;
const Object& Object = *((ObjectPtr)0);
をグローバル宣言することでstatic_funcの呼び出しは解決しますが、
型名と変数名が衝突してしまいます。

目的はパズル的な事なので意味はありません。
0322デフォルトの名無しさんNGNG
よくわからん。出直せ。
0323デフォルトの名無しさんNGNG
>>332
Object::static_hoge();
ではなく
Object.static_hoge();
でアクセスできないかという意味です
0324デフォルトの名無しさんNGNG
txtファイルに文字をうって
そのあと、そのファイルに文字を追加入力するには
どうすればいいのでしょう?
読み込んだ配列に配列を足すでは無理みたいで
0325デフォルトの名無しさんNGNG
>>323
staticメンバ変数はインスタンス無しで呼び出せるが、後者の書式は
インスタンスを必要とするので、何でもいいからObject型のオブジェクトを
作成すればいいのでは。
0326デフォルトの名無しさんNGNG
>>325
Object.static_hoge();の部分は変更できませんので、
インスタンス名がObjectでないといけません。
そうするとObject objectの部分で型名と衝突し、
通常はコンパイルエラーが出ると思います。

また、適当なインスタンスを作成するよりは、
325の通りNULL参照を使う方が低コストかと考えました。
0327デフォルトの名無しさんNGNG
つまり、JavaなりDelなりからC++に移って
記法が気に入らないから、合わせる方法はないか探しているということですね。
0328デフォルトの名無しさんNGNG
>>327
そんなところです。
気に入らないわけではありませんが
同じコードが動けば楽かと思いまして。
0329デフォルトの名無しさんNGNG
無理なものは無理
0330デフォルトの名無しさんNGNG
プリプロセッサでも通せ
0331デフォルトの名無しさんNGNG
namespaceで囲えばいいんでは?

namespace Hoge {
 struct Object {
  static void func() { cout << "Nurupo" << endl; }
 };
}

typedef Hoge::Object *ObjectPtr;
const Hoge::Object& Object = *((ObjectPtr)0);

Object.func();
0332デフォルトの名無しさんNGNG
>>331
この2行をクリアしたいのですが、無理ではないでしょうか
Object.func();
Object obj;

スレ違いな気もしますので、これ以上はやめておきます。
失礼しました。
0333デフォルトの名無しさんNGNG
郷に入れば郷に従え
0334デフォルトの名無しさんNGNG
>>332
cppで。

#define Object instance
Object.func();
#undef Object
#define Objec className
Object obj;
0335デフォルトの名無しさんNGNG
インデックス値が、小さい方から大きい方へ順番に入っている
配列やリストを指す言葉ってありますか?大きい方から小さい方でも構いません。
0336335NGNG
これじゃ意味不明だ。
ええとインデックス値というのは、ユーザ定義の序列みたいなものでお願いします。

どうでも良いといえば良いのですが、こういう概念を一言で表せると考えやすいので…。
0337デフォルトの名無しさんNGNG
もしかして昇順、降順のことか?
0338デフォルトの名無しさんNGNG
>>337
ありがとうございます
昇順リスト、昇順配列と呼ぶことにします
0339303NGNG
>>305
いや、ここで聞く前にそこ探したんだけど
イメージが見つからなかったのよ… とほほ
0340デフォルトの名無しさんNGNG
>>339
Cygwinでも入れてfindで探すとか。
0341デフォルトの名無しさんNGNG
Operaで開こうとすると「保存しますか?」と出て保存できるのは内緒だ
0342デフォルトの名無しさんNGNG
C99のときは再インストール後、Acrobat Readerをインストールする前にそこへ行ってきて、
お馴染み、ファイルのダウンロードのダイアログから堂々と保存しました。

今回はTemporary 〜 から引っぱってきたけどね。
0343デフォルトの名無しさんNGNG
>>339
画面にPDF開いた状態で探さないと閉じたら消されるとかかもしれん。
画面に出したまま探してみ。拡張子PDFで。
0344デフォルトの名無しさんNGNG
>>339
C:\Documents and Settings\XXXXXXX\Local Settings\Temp\
にPDFのtmpファイルがあったのでリネームでOKだったxp。
0345339NGNG
>>340-344
みんなアリガト

ExplorerだとTemporary Internet Filesの下のContent.IE5とかが見えなかったんだけど
Cygwinでfind . -name '*.pdf'したら一発で見つかったよ

これローカルに落としてもAcrobatのメニューが使えないのね…
0346デフォルトの名無しさんNGNG
>>345
画像データだから。
それからExplorerだと隠しフォルダ属性を取らないと見つからないかもね。
0347デフォルトの名無しさんNGNG
コンテナからeraseするときは、iteratorを後置インクリメントすると良いと習ったのですが

for (iterator = container.begin(); it != container.end();){
    if (条件が合えば){
        container.erase( iterator++ );
//     iterator = container.erase( iterator );
    }
    else {
        ++iterator;
    }
}

これだとcontainerがvectorなどだと、最後尾のコンテナを削除したとき
エラーが出てしまいます(コメントアウトした方のやり方だと大丈夫)。
私が習ったやり方はあまり良い物では無いのでしょうか。
0348デフォルトの名無しさんNGNG
>>347
Effective STL 嫁
削除系関数はイテレータを無効化するので
container.erase( iterator )
では iterator が無効化されてしまう
0349デフォルトの名無しさんNGNG
>>347
>私が習ったやり方はあまり良い物では無いのでしょうか。
その通り。
0350348NGNG
あ、スルーしてくり
0351デフォルトの名無しさんNGNG
>>347
オマエ、もしかして早合点のクセないか?
そんなことを教えるわけがなさそう
0352デフォルトの名無しさんNGNG
>>348-349
listとかだと上手くいくので、私が何か勘違いしているのかと不安でした。
今後はコメントアウトした方で行きます。Effective STLも求めてみます。
レスありがとうございました。
0353デフォルトの名無しさんNGNG
>>352
「習った」とあるが、本当にそう教わったのなら教えた香具師が馬鹿。
教えた香具師が信頼できるのなら教わった藻前が早合点している。
0354デフォルトの名無しさんNGNG
標準シーケンスコンテナではeraseの戻り値、
標準連想コンテナではのようにするってことじゃないの?
0355デフォルトの名無しさんNGNG
基本的なことなんですけど、文字色はどうやったらかえれますか、
できたら教えてください。
0356デフォルトの名無しさんNGNG
>>355
ちっとも基本的なことじゃないから安心しろ。
http://www.kumei.ne.jp/c_lang/intro/no_58.htm
0357デフォルトの名無しさんNGNG
できないので教えられない
0358デフォルトの名無しさんNGNG
なるほど、ありがとうございます
0359デフォルトの名無しさんNGNG
wmpの視覚エフェクトを自分で作っているのですが、
現在再生中のファイル名と
再生した経過時間を取得するにはどうすればいいでしょうか。。

板違いだと思うのですが、どこで聞いてよいか分からなくて、、、
どなたかご教授ください。
0360デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1101393155/
0361359NGNG
誘導ありがとうございます。
0362デフォルトの名無しさんNGNG
以下のようなコード(ただしhoge_tはPODではない)で、クラスA,Bの
コンストラクタ起動時は変数a,bのコンストラクタ起動前なのに
a,bへのポインタを使っていますが、これはC++の規格的にOKですか?

#include<iostream>
class Base {
protected:
  hoge_t a b, *ptr;
  Base( hoge_t *p ) : a(), b(), ptr( p )
  { a= ...; b= ...; } //aとbの初期化処理
public:
  const hoge_t get(void) { return *ptr; }
};
class A : public Base {
public:
  A(void) : Base( &a ) {}
};
class B : public Base {
public:
  B(void) : Base( &b ) {}
};
int main(void){
  A a;
  B b;
  std::cout<< a.get()<< "\n";
  std::cout<< b.get()<< "\n";
  return 0;
}
0363デフォルトの名無しさんNGNG
フラグを使うときにintなら
int f_hoge=0;
f_hoge = 1 - f_hoge;
みたいに出来ますが、
このフラグをboolでやるとすると
どのようになりますか?
0364デフォルトの名無しさんNGNG
>>363
bool fHoge = false;
fHoge = !fHoge;
0365デフォルトの名無しさんNGNG
>>362
hoge_tってどこから出てきた?
0366デフォルトの名無しさんNGNG
>>362
それは結局「以下が可能か?」という問いに帰着されるような気がする
struct hoge_t {};
struct Base {
hoge_t a, *ptr;
Base() : ptr( &a ), a() {}
};

gccだと362は(typoを適当に直して)-Wallでも警告なしでコンパイルされるのに対して
上の例は警告が出る
規格だとどうなんでしょうね?
0367デフォルトの名無しさんNGNG
>>362
struct hoge_t {};
class Base {
protected:
hoge_t a, b, *ptr;
Base() : a(), b(), ptr(0) {}
};
class A : public Base {
public:
A(void) : Base() {ptr = &a;}
};
class B : public Base {
public:
B(void) : Base() {ptr = &b;}
};
だと規格上確実だと思うけどダメかい?
0368デフォルトの名無しさんNGNG
>>366
派生クラスの構築は、基底クラスのコンストラクタが呼び出されてから
メンバ、派生クラスの順に初期化されるから大丈夫じゃね?

gcc3.4.2で-Wallにしてみたが警告は出ない。
0369デフォルトの名無しさんNGNG
>>367
あーそっか。aとbがまだ初期化されてないうちに使うとまずいね。
0370デフォルトの名無しさんNGNG
皆さん回答ありがとうございます。
>365氏
hoge_tは実際にはテンプレートを使ったクラスです。
>366氏
そのコードでは、aへのポインタを得るタイミングが>362より若干遅い気がします。
>367氏
最初はそのコードと同様にしてたのですが、それだと
・ptrをNULLで初期化してから派生クラスでもう一度設定しなおすという回りく
 どい処理になる
・派生クラスでptrの設定をしなくてもコンパイルできてしまう(実行時まで派生
 クラスでのptr設定忘れに気が付けない)
ので>362でコードを書いて、Win2KPro,cygwin1.5.9,gcc3.3.1という環境でコン
パイルは通るのですが、未初期化の変数へのポインタを使うことがC++の規格と
して正しいのか気になって質問しました。
私はなんとなくCの不完全型へのポインタと似た感じを受けるので規格違反して
いないと思っています。
0371362NGNG
失礼しました。>370は私の書き込みです。
0372デフォルトの名無しさんNGNG
>>370
未初期化の変数へのポインタが使えないと、自己参照型クラスは
作れなくなるぞ。
0373デフォルトの名無しさんNGNG
>>370
もし hoge_t::operator&() があると、ctor の前にこれ呼ばれる?
0374デフォルトの名無しさんNGNG
>373
それは完全にundefined behavior
0375デフォルトの名無しさんNGNG
C++はC99と後方互換が無いんですか?
0376デフォルトの名無しさんNGNG
>>375
後方互換の話ならC99スレを立ててそこで議論してくれ。
もちろん後方互換ではないけど。
0377デフォルトの名無しさんNGNG
後方互換とはなんだと調べようとしたらIMEのやつ広報5巻って出してくる。
ワラッテサキヘススメン。
0378デフォルトの名無しさんNGNG
% [ttt.cpp] %%%%%%%%%
#include <stdio.h>
class SampClass {
public:
SampClass();
~SampClass();
private:
void memFunc000(void);
};
typedef struct tagSampStruct {
struct {
SampClass aaa;
};
} SampStruct;
int
main(int argc, char **argv)
{
printf("Hello\n");
}
%%%%%%%%%%
というコードをgccでコンパイルすると、
> ttt.cpp:14: error: member SampClass tagSampStruct::<anonymous struct>::aaa'
> with constructor not allowed in anonymous aggregate
> ttt.cpp:14: error: member SampClass tagSampStruct::<anonymous struct>::aaa'
> with destructor not allowed in anonymous aggregate
というエラーが発生しますが、VC++ではエラーが発生しません。
VC++でも同様のエラー(ワーニングでも可)を発生させたいのですが
そのようなことは可能でしょうか?
ご教示おねがいいたします。
0379デフォルトの名無しさんNGNG
教えて下さい!
参照って何 具体的な使用例とか、詳しいサンプルとかほしいなぁ
お勧めのホームページとか、あったら教えて欲しいし
お願いしますね
0380デフォルトの名無しさんNGNG
>>379
詳しくはC++Primerをお読みください。
0381デフォルトの名無しさんNGNG
>>378
警告レベルをW4にすると
warning C4201: 非標準の拡張機能が使用されています : 無名の構造体または共用体です。
と出てくれる
0382デフォルトの名無しさんNGNG
>>380
ありがとうございます。
でも ごめんなさい・・・C++Primerって何処にあるんですか???
0383デフォルトの名無しさんNGNG
本屋
0384デフォルトの名無しさんNGNG
本屋さんですか?(泣)
C++Primerって本なんですか?困ったな
0385デフォルトの名無しさんNGNG
>>384
初心者にありがちなのですが、初心者だから初めはWEBページでちょっと勉強してから、
というような人が多いようです。
しかし、誰か得体もしれぬ人が作ったようなWEBページは多くの場合、説明が不適切・
不親切であったり、まとまりにかけていたり、そうでなかったとしてもごく一部の
話題しか取り扱わなかったりして、とても読みにくいものです。
また、解かりやすい解説を捜し当てるのにかかる手間がかかるでしょう。
もし、許されるならば書籍を購入された方がはるかに有意義だと思いますよ。
0386デフォルトの名無しさんNGNG
>>385
> また、解かりやすい解説を捜し当てるのにかかる手間がかかるでしょう。
訂正:また、解かりやすい解説を探し当てるのにわりと手間がかかるでしょう。
0387デフォルトの名無しさんNGNG
C++Primerってヘンーナ日本語訳しているよね。
デリファレンスとか、インデクスとか。
0388デフォルトの名無しさんNGNG
一見親切にも見えるWebページは情報が不正確だったり
最悪うその垂れ流しだったり、うのみにしてはいけない。
その判断が自分で出来ないなら書籍を買う方が良い。
ただし、書籍にも糞本はいっぱいあるから気を付けれ。
0389デフォルトの名無しさんNGNG
糞本の代表
ttp://www.amazon.co.jp/exec/obidos/ASIN/4839912025/qid=1103030113/sr=1-43/ref=sr_1_2_43/249-3354889-3141955
0390デフォルトの名無しさんNGNG
レビューがすごいな
0391デフォルトの名無しさんNGNG
>>379
まずは、禿本だな
それでわからんかったとこを方々調べて解読

俺自身、そうやって憶えた
当時の禿本は初版だったが・・・
0392デフォルトの名無しさんNGNG
>>389
俺もだまされたうちの一人
0393デフォルトの名無しさんNGNG
>>389 にくらべればこっちの方が100倍マシ
ttp://www.amazon.co.jp/exec/obidos/ASIN/4798008532/
0394デフォルトの名無しさんNGNG
>>389
レビュー禿ワラタ
0395デフォルトの名無しさんNGNG
立ち読みで判りそうなことばかり・・・ アフォかこいつら
0396デフォルトの名無しさんNGNG
>>395
買わなくてもコメント出来るから君もすれば?
0397デフォルトの名無しさんNGNG
構造体って必要ですか?
全部クラスに統一した方がスッキリすると思うんだけど。
0398デフォルトの名無しさんNGNG
>>397
そもそもC++の構造体はクラスと大差ない。
0399デフォルトの名無しさんNGNG
>>398
っていうかデフォルトの可視性以外全部一緒
0400デフォルトの名無しさんNGNG
つーか、classのデフォルトもpublicでいいだろ。特に基底クラス
0401デフォルトの名無しさんNGNG
>>399
機能としてはそうですよね。
言語仕様を無駄に煩雑にしてる気がするんですが、
クラスを使わず構造体を使う方が適切なケースってあります?
0402デフォルトの名無しさんNGNG
Cからの遺産
0403デフォルトの名無しさんNGNG
POD使いたい時
0404デフォルトの名無しさんNGNG
>>400
だよな。デフォルトがprivateだからついついメンバ変数を先に書いちゃったりする。
普通に考えたらインターフェースであるpublicメンバ変数が上に来てるほうが良いってことは明らかなのに。
0405404NGNG
>publicメンバ変数
publicメンバ関数
0406デフォルトの名無しさんNGNG
C++FAQには短いプログラムを書くときにこの方が便利だからと
書いてあったが、やっぱ public が上にある方がいいよな
0407デフォルトの名無しさんNGNG
>>406
その場合structで書けばいい。
関数オブジェクトはよくstructで書く。
0408デフォルトの名無しさんNGNG
>>406
class いらねーよな
テンプレには typename だし
0409デフォルトの名無しさんNGNG
C++自体がいらない
0410デフォルトの名無しさんNGNG
>>409
んなこたぁーない。
0411デフォルトの名無しさんNGNG
構造体がアラインされてないとパフォーマンスが大きく低下するって聞いたのですが、何故こうなるんですか?
0412デフォルトの名無しさんNGNG
>>411
CPUによる。CPUによってはアラインされていないとバスエラーを起こして
そもそも動かないものもある。
0413デフォルトの名無しさんNGNG
32bitのデータを32bit境界から開始しておけばそのまま32bitで取り出せるが
8bit境界で適当に開始されていると24bit+8bitとか16bit+16bitとか分離して
読み込んだあと結合しないといけないから。
0414デフォルトの名無しさんNGNG
>>413
器用で、寧ろ余計なお世話なCPUだな。普通のCPUはそんなことしない。
0415デフォルトの名無しさんNGNG
>>414
かつて "普通" だった CPU はしっかりやっていたが・・・
0416デフォルトの名無しさんNGNG
余計なお世話というより、互換性のためにしょうがなくやってるって感じか。
0417デフォルトの名無しさんNGNG
組込み系だといまだにそれが普通なんじゃないの?
0418デフォルトの名無しさんNGNG
alignmentがいい加減でもパフォーマンスが落ちるか落ちないか
っていうのはRAM側の問題じゃないの?
0419デフォルトの名無しさんNGNG
>>418
DSPなんかだと、RAMというよりコアの問題だと思う。
C++の話題じゃないけど(w
0420デフォルトの名無しさんNGNG
>>418
dynamic phase alignment をサポートしてるかどうかってことでいいの?
スレ違いだけど >>411 の疑問は解消しなければ
0421デフォルトの名無しさんNGNG
RAMとは関係ないんじゃないの?
メモリ空間にマッピングされるのってRAMだけとは
限らないわけだし。(例えばレジスタとか)
0422デフォルトの名無しさんNGNG
構造体のメンバーへのアクセスってメモリの先頭からのオフセットだよね?
mallocとかnewとかで確保した領域にアクセスする場合でも
最適化でレジスタに読まれてから処理されてるん?
アセンブラ出力させて調べてみよう・・・orz
0423デフォルトの名無しさんNGNG
>>422
質問の意味がわからないけど、レジスタに入れないとなにもできないと思う……
0424デフォルトの名無しさんNGNG
>>423
そうか?
0425デフォルトの名無しさんNGNG
>>424
俺もわからん。解説してくれ。
0426423NGNG
アホなこと言った?だったらゴメン。
レジスタ使わないでできることと言ったら、DMAくらいしか思いつかない……。
0427デフォルトの名無しさんNGNG
x86系なら、一応メモリに直接演算出来るし
比較程度だったら、レジスタに読み出さないでやってるかも。
速度的には不利になる場合も多いけど。

でも、メモリに対して演算できても、
その結果を読み出して使う段では、普通はレジスタにロードするね。


関係ないけど、google翻訳(日→英)で、デストラクタを訳すと
Death Tractor (死のトラクター)になるらしい。
D言語スレで見た。
0428デフォルトの名無しさんNGNG
むしろExcite翻訳がかなり正確にム用語を訳せて驚いた
0429デフォルトの名無しさんNGNG
>>422
アーキテクチャに夜。
32bitと64bitでも違うことあるし。
0430デフォルトの名無しさんNGNG
1+2+3,1+2-3,1-2-3,1*2-3,・・・・・・のように符号を変えていって値を
求めたいのですが、

char fugou[4]={'+','-','*','/'};
for(a=0; a<=2; a++){
cout<<1<<fugou[a]<<2<<fugou[a]<<3<<endl;
}

COUTからどのようにして答えを出せばいいのでしょうか?
0431デフォルトの名無しさんNGNG
すっごい初歩的な事かもしれないんですが、いくら書籍&サイトを
探しても載ってなかったので質問です。

メンバにint mIntを持つクラスAがあったとして

A a;
int n = a; //int n = a.mInt;

というような代入をする演算子をオーバーロードする事は出来ますか?
既出だったらすみません。


0432デフォルトの名無しさんNGNG
>>430
その宿題は演算子の優先順位も考慮しないといけないんじゃないのかな?
0433デフォルトの名無しさんNGNG
>>431
intへのキャストをオーバーロードすればいいんでない?
0434デフォルトの名無しさんNGNG
>>433
なるほど!!!!!
ありがとうございます!!!!
あ、キャストをオーバーロードした時って何か弊害ありますかねぇ?
0435デフォルトの名無しさんNGNG
import java.awt.Graphics;
import java.applet.*;
import java.awt.Image;

public class Test extends Applet {
Image im[] = new Image[4];

public void init() {
im[0] = getImage(getDocumentBase(), "a.gif");
im[1] = getImage(getDocumentBase(), "b.gif");
im[2] = getImage(getDocumentBase(), "c.gif");
im[3] = getImage(getDocumentBase(), "d.gif");
}

public void paint(Graphics g) {
double x = Math.PI * 0;
double y = 200 - Math.sin(x);
for (int i=0; i<4; i++){
g.drawImage(im[i], 100 * x, y, this);
x += Math.PI * 1/4 ;
}
}
}

という画像をsinカーブ上に並べる プログラムを作成したのですが、コンパイルすると、
0436デフォルトの名無しさんNGNG
シンボルを解決できません。
シンボル:メソッド drawImage (java.awt.Image,double,double,Test)
場所 : java.awt.Graphics の クラス
   g.drawImage(im[i],100 * x,y,this);
    ^
エラー1個

というエラーがでてしまいます。どこがおかしいのでしょうか?
ttp://pc5.2ch.net/test/read.cgi/tech/1100559011/859-861
でも聞いたのですが直りません。お願いします。


0437デフォルトの名無しさんNGNG
>>434
不用意にprivateメンバの保護を剥がすような(ポインタを返すような)事をしなければ大丈夫
0438デフォルトの名無しさんNGNG
>>435>>436
Java厨はスレ違いだから他へ逝け。
0439デフォルトの名無しさんNGNG
標準偏差ってどう求めればいいの?
0440デフォルトの名無しさんNGNG
>>439
分散の平方根でいいのでは?
0441デフォルトの名無しさんNGNG
ぐぐれ
0442デフォルトの名無しさんNGNG
>>439

平均値を出して、各値と平均値の差を二乗し、その和を取り、要素数-1で割り、平方根を取る
0443デフォルトの名無しさんNGNG
>>437
ありがとうございました。早速使ってみます!
0444デフォルトの名無しさんNGNG
> 要素数-1で割り

どっから出た
0445デフォルトの名無しさんNGNG
>>444
高卒?
0446デフォルトの名無しさんNGNG
>>444
1/nでもいいんだけど、n-1にしておくと
無作為にm個選んだ場合の分散の期待値が
全体の分散と一致するんだよ
0447デフォルトの名無しさんNGNG
439です
どうもありがとう
エクセルのような関数ってないですか
0448デフォルトの名無しさんNGNG
>>447
stdev及びstdevp
helpをみると446の話が出てくるはず
0449デフォルトの名無しさんNGNG
>>447
>エクセルのような関数
なのね
間違ったorz
0450デフォルトの名無しさんNGNG
>>447
gslとか
0451デフォルトの名無しさんNGNG
gslはライブラリの名前です
ttp://www.gnu.org/software/gsl/

標準ではないと思う
0452デフォルトの名無しさんNGNG
ていうかそれぐらい自作しる
0453デフォルトの名無しさんNGNG
447です。
gsl 英語が読めないので自作します
ありがとうございます。

0454デフォルトの名無しさんNGNG
template <class T, int A> T aaa()
{
return A + aaa<T, A - 1>();
}

template <class T> T aaa<T, 1>()
{
return 1;
}

エラーが出てコンパイル出来ないのですが
どこが間違えているのでしょうか?
0455デフォルトの名無しさんNGNG
>>454
ModernC++Designにも書いてある通り、
関数テンプレートはメンバ/非メンバ問わず部分的な特殊化ができない。
(コンパイラはオーバーロードなのか特殊化なのか判別ができない)
オーバーロードを使って解決することも出来るけど、
その程度ならコンパイル時定数として保持するのが吉。
0456デフォルトの名無しさんNGNG
>>455
ありがとうございます。
これは試しに書いてみただけなので困ることはないんですけど
すっきりしました。
0457デフォルトの名無しさんNGNG
>>454
関数テンプレートの部分特殊化をエミュレートする方法として
クラステンプレート + 静的関数ってのがあるので,参考までに.

template<class T, int A>
class aaa
{
static T invoke(){ return A + aaa<T, A - 1>::invoke(); }
};

template<class T>
class aaa<T, 1>
{
static T invoke(){ return 1; }
};

aaa<int, 10>::invoke();
0458デフォルトの名無しさんNGNG
標準入力の入力バッファをクリアする方法ってあるでしょうか?
scanf() するときに、以前に入力されたものが入力バッファに入っていると、
使いにくいプログラムになるので、
scanf() する前に入力バッファをクリアしたいのです。
0459デフォルトの名無しさんNGNG
>>458
std::cin.readsome()ってのがあったような。
OSのバッファには効かないけど。
0460デフォルトの名無しさんNGNG
>>458
while (getchar() != EOF); では駄目かな
0461デフォルトの名無しさんNGNG
それだと、入力にウェイトがかかって無限ループになるだけ。
0462デフォルトの名無しさんNGNG
直接のC++の相談じゃないんだけど、
C++でコンパイルして、MS−DOSで結果でた、そのウインドウを
そのウインドウ自体のまま画像にするのってどうしたらいいんでしょう??
0463デフォルトの名無しさんNGNG
>>458
fgets()でめいっぱい読み込んでからsscanf()するのは、そういう問題が
起きないようにするためだ。

但しfgets()で指定した文字数よりも余計に入れられると、これもだめだ
けどね。
0464デフォルトの名無しさんNGNG
>>462
デジカメで撮る。
0465デフォルトの名無しさんNGNG
>>462
Alt + PrintScreen
0466デフォルトの名無しさんNGNG
>>465
ありがとう。
でも、できないみたいけど・・・?
できてるとしたら、画像ってどこに配置されてる?
0467デフォルトの名無しさんNGNG
>466
板違い。PC初心者板へ池
0468デフォルトの名無しさんNGNG
>>466
ペイント開いて、Ctrl+V
0469デフォルトの名無しさんNGNG
>>466
クリップボード
0470デフォルトの名無しさんNGNG
>>462
つーか、何で画像にしたいの?
0471デフォルトの名無しさんNGNG
>>462
foo.exe > foo.txt

これで済むんじゃないのん?
0472デフォルトの名無しさんNGNG
Javaできる、C#できるって人がC++始めたいのに最適な書籍はありませんか?
その前にC覚えろって話しですか?
0473デフォルトの名無しさんNGNG
その前に先ず日本語だろ。
0474デフォルトの名無しさんNGNG
>>473
オマエガナー
0475デフォルトの名無しさんNGNG
>>472
C++Primer
0476デフォルトの名無しさんNGNG
タスク教えて
0477デフォルトの名無しさんNGNG
>>476
どの?
0478デフォルトの名無しさんNGNG
ゲイは澪タスク
0479デフォルトの名無しさんNGNG
局所静的オブジェクトって最初に通る時に一度だけ初期化されるんですよね。これって
どうやってるんですか? 素直に考えてフラグを持って通るたびに条件分岐?
それとも最初に通った時に自分自身を書き換えるような事をしてるんでしょうか。
0480デフォルトの名無しさんNGNG
>>479
もちろん実装依存だが、普通は毎回テストしてるはず。
0481デフォルトの名無しさんNGNG
>>479-480
「最初に通る時に一度だけ初期化」っていうのはそういう意味じゃなくて、
「実行ファイルのロード時に局所変数領域にイミディエイト値もロードされる」
ってこと。
0482デフォルトの名無しさんNGNG
局所変数領域がなんで最初に確保されるんだ?っていう突っ込みもあろうが、
それはコンパイラが提供するスコープ範囲の機能を実現する都合だけであって、
静的である以上はいつ確保しても同じ。
0483デフォルトの名無しさんNGNG
>481-482
オブジェクトと変数は違うと思うけど・・・
0484デフォルトの名無しさんNGNG
当然だとは思うけど

class Hage {・・・};
void hoge() { static Hage hage; }

hogeを複数スレッドから同時に呼び出した場合、hogeの初期化を同期なんてしてくれませんよね?
0485484NGNG
hogeじゃなくてhageの初期化でした。
0486デフォルトの名無しさんNGNG
static だからインスタンスは1個
同期も糞もないと思うが
0487デフォルトの名無しさんNGNG
staticメンバはmain()関数の実行を開始する前に既に初期化を終えているんだっけ?
0488デフォルトの名無しさんNGNG
>>486
関数内のstatic変数は最初に実行されたときに初期化されると規格で決まってるらしい。
0489デフォルトの名無しさんNGNG
>>487
通常のローカル変数同様、変数宣言の字面上の位置で初期化される。
例えば int f(int a) { static b = a; return b; } があった場合、
b には初回呼び出し時の引数が代入され、以後ずっと変化しない。

>>486
一個だからこそ同期うんぬんという話が出てくるように思えるが・・・
0490デフォルトの名無しさんNGNG
int f(int a) { static const b = a; return b; }
これなら大丈夫
0491デフォルトの名無しさんNGNG
もちろん実装依存だとは思うけど

VC++,bcc,gccの3つは
初期化処理が必要な、関数内のstaticデータ
int f() { static int n = atoi("123"); return n; }
は、単純にフラグを使って
実行されるたびに初期化されたかを判定していて
同期処理は無しでした。
0492デフォルトの名無しさんNGNG
C++ で行列クラスを作っていて、転置行列を返す関数を実装したいと思っています。
その場合、

class Matrix {
  ...
  Matrix Transpose(void) const;
};

のような設計で問題ないでしょうか?
たとえば、

Matrix a;
Matrix b = a.Transpose()

とした場合、Matrix オブジェクトは一度しか生成されていない (それが b)
ということが保証されるでしょうか?
0493デフォルトの名無しさんNGNG
いんにゃ
普通はコピーコンストラクタでコピーされる

設計は問題ないと思うけどね
0494デフォルトの名無しさんNGNG
敢えて言うなら返値はconst Matrixの方がいいと思う
0495デフォルトの名無しさんNGNG
>>493
そうですか。
やはり無駄なコピーを抑えたければ、
void Transpose(Matrix* m) const;
みたいにしないといけませんか。

>>494
え?その必要はないと思いますけど。。。
0496デフォルトの名無しさんNGNG
>>494
参照でもないのに何で const ?
0497デフォルトの名無しさんNGNG
一時オブジェクトへの代入を禁止するため?
0498デフォルトの名無しさんNGNG
何も考えてないんじゃ?
0499デフォルトの名無しさんNGNG
C++ にこんな仕様があると便利かも。
仮にキーワード noncopy を導入して

class Matrix {
  noncopy Matrix Transpose(void)
  {
    noncopy Matrix m;
    ... m を転置行列としてセットアップ ...
    return m;
  }
};

と記述すると、戻り値の Matrix が引数の最後にポインタとして
渡されたかのように処理される。
そのポインタを受け取るのが、実装における noncopy 宣言された変数。
0500デフォルトの名無しさんNGNG
>>493
実際は大抵最適化でコピーしないようになるし、規格だってそういう動作にしても良いと書いてあるはず。
0501デフォルトの名無しさんNGNG
それ(戻り値最適化)が出来るのは
戻り値を return Matrix(...); と書ける場合のみ
0502デフォルトの名無しさんNGNG
ちょっと訂正
×戻り値最適化が出来るのは
○戻り値最適化によって、コピー回数がゼロになるのは
0503デフォルトの名無しさんNGNG
>502
名前付き戻り値最適化っていうのも規格上は許されていますけれどね.
実際にコンパイラが最適化出来るかどうかはまた別の問題ですが.
0504デフォルトの名無しさんNGNG
>>501
明示的なキャストの評価結果は?
0505デフォルトの名無しさんNGNG
>>501
オブジェクトを()ではなく=で初期化した場合は?
0506501NGNG
揚げ足取りうざい
0507デフォルトの名無しさんNGNG
>>506
ちょっとしたタイポ類ではなく
言ってる内容の本筋の誤りを指摘したわけだが
逆切れか・・・

ま、そういう手合いならこちらもそのつもりでいようか
0508デフォルトの名無しさんNGNG
>>504=>>505=>>507はトリップ付けてね
0509504=505=507 ◆dGkqy8VIyg NGNG
すまんかった
0510デフォルトの名無しさんNGNG
509は俺じゃない
ま、「そーゆー手合い」のすることですから (プ
0511デフォルトの名無しさんNGNG
(何一人で熱くなってるんだろ…)
0512デフォルトの名無しさんNGNG
ナニこのヒト?
って感じ。
0513デフォルトの名無しさんNGNG
最適化の話はどうした?
ぐうの音も出ないのか

ま、そーだろな (プ
0514デフォルトの名無しさんNGNG
ぐぅ〜



( -Д-)あ〜腹減った…
0515デフォルトの名無しさんNGNG
二次元配列を動的にメモリ確保するにはどうすればいいんでしょうか。

int xsize = 100;
int ysize = 100;
int ** array = new int[xsize][ysize];

では駄目でした。
0516デフォルトの名無しさんNGNG
>>515 Ruby!
0517デフォルトの名無しさんNGNG
>>515
こうすればいいけど、std::vectorを使うほうが楽。
int x = 100;
int y = 100;
int ** array = new int*[x];
array[0] = new int[x * y]
for (int i = 1; i < x; i++)
  array[i] = array[0] + i * y;

delete[] array[0];
delete[] array;

0518デフォルトの名無しさんNGNG
>>517 は二次元配列とは呼ばない。ポインタの配列。
0519デフォルトの名無しさんNGNG
>>515
char (*p)[50];
p = new char[100][50];
0520デフォルトの名無しさんNGNG
MFCのダイアログベースアプリ作ってます。
CStringの変数の中に半角スペースが入っているか確かめるにはどうすればいいでしょうか。
全角スペースは関係なしです。

たとえば、CString AAA; の中身が
"c:\\program files\\test\\test.exe"
これならNG
"c:\\testapp\\test\\test.exe"
これならOK
という具合にしたいです。
0521デフォルトの名無しさんNGNG
>>520
AAA.Find(' ')じゃだめか?
ついでにGetShortPathNameも調べてみな
0522デフォルトの名無しさんNGNG
>>520
スレ違い。
0523デフォルトの名無しさんNGNG
どなたか>>519をかみ砕いて説明していただけないでしょうか…
char(*)[50]型のpを宣言しているのは何となく分かるのですが
0524デフォルトの名無しさんNGNG
>>523
char a[100][50]; は char b[50]; が100個繋がったもの。
つまりchar b[50]; がarray_50という型だとすると array_50 a[100]; という風に考えることができる。
>>519に当てはめると
array_50 *p;
p = new array_50[100];
となるから俺もわかんなくなってきたから自分で考えてくれ。
0525デフォルトの名無しさんNGNG
new char[100] はcharが100個連続したものを返してくるから
charへのポインタで受ける。
new char[100][50] はchar[50]が100個連続したものを返してくるから
char[50]へのポインタで受ける。
0526デフォルトの名無しさんNGNG
>>524,525ありがとうございます。
やっていることはわかるのですがpの宣言の仕方にひっかかっています。
もっと調べてみます。
0527デフォルトの名無しさんNGNG
>>519
それだと

int x = 100, y = 100;
char (*p)[y];
p = new char [x][y];

これができないと思うんだけど
0528デフォルトの名無しさんNGNG
そもそもyの部分がコンパイル時に決まらないと2次元配列は無理だな。
0529デフォルトの名無しさんNGNG
>>517
でええやん。
0530& ◆QWv3R1XL8M NGNG
15日でC++をSTL、テンプレまで使えるようになる修行方法教えてください。
0531デフォルトの名無しさんNGNG
>>530
まずはペンキ塗りからだ。終わったら床掃除。
0532デフォルトの名無しさんNGNG
便所掃除も忘れるなよ
0533デフォルトの名無しさんNGNG
>>529
>>517 は論外
0534デフォルトの名無しさんNGNG
ある動的に生成されたクラスが、他のポインタに参照されている
、あるいはされていないということを実行中に知ることは出来ますか?

class CA{...}:

int main(void){
CA pca = new CA();
void* = pca;
if(pca->参照されているか否か())
{
cout<<"参照されてない"<<endl;
}

}
0535デフォルトの名無しさんNGNG
>>534
言わんとすることはわかるが、めちゃくちゃだな。
答えとしてはできない。
0536デフォルトの名無しさんNGNG
多分求めたいものはshared_ptr
0537デフォルトの名無しさんNGNG
shared_ptr<CA> pca(new CA);
shared_ptr<CA> pca_p;

pca_p = pca;

if (pca.use_count() == 1) {
 cout << "参照されていない" << endl;
}
0538デフォルトの名無しさんNGNG
>535
すまん、C++は余り知らんのだ。

C++でJAVAのGCみたいなことできないかなと思ったが、
やっぱ素直にスマートポインタ使えと言うことなのかな
0539デフォルトの名無しさんNGNG
>534
weak_ptr?
0540362NGNG
>538
Boehm GCはどうよ?
0541デフォルトの名無しさんNGNG
月狼タンハァハァ
0542デフォルトの名無しさんNGNG
うちの大学の講師が変数は全て関数の最初で宣言した方が
わかりやすいって言っているんですが、これってどうなのでしょうか…?
0543デフォルトの名無しさんNGNG
ただ単にCに慣れてるだけだろ
0544デフォルトの名無しさんNGNG
>>542
(;´Д`)
わかりやすいかどうかは別にして、無駄にコンストラクタが呼ばれることが増えるな。
0545デフォルトの名無しさんNGNG
>>542
関数の最初ではなくスコープの最初というのなら、わからんでもない。
ソースをCに移植した時、泣きを見ずにすむのは確かだ。
0546デフォルトの名無しさんNGNG
>>545
>ソースをCに移植した時
そんなことするか?
するとしたらそれこそ変数の宣言位置の問題なんかかわいいもんだろう。
0547デフォルトの名無しさんNGNG
>>542
そのうち、

メンバ関数を使うと処理が分散してわかりにくくなるので禁止
アクセスしやすいようにメンバ変数はグローバルにする
#define TRUE 1

などと言い出すに違いない
0548デフォルトの名無しさんNGNG
>ソースをCに移植

extern "C"
0549デフォルトの名無しさんNGNG
>>545
現実問題としてC++で構築されたものをCしかない環境へ移植しなければならないって案件見たことないんだけど、なんか事例ある?
よほど小さい簡易なコードならわからんでもないんだけど。
0550デフォルトの名無しさんNGNG
>>548
0551デフォルトの名無しさんNGNG
Cocoaアプリへの移植とか?
Mac使ったことないから良く知らないけど
0552デフォルトの名無しさんNGNG
>>547
> #define TRUE 1
これの笑いどころが理解出来ない。
0553デフォルトの名無しさんNGNG
if(strcmp(unko, geri) == TRUE) goto 552;
0554デフォルトの名無しさんNGNG
>>552
0555デフォルトの名無しさんNGNG
>>553
ワロタ
0556デフォルトの名無しさんNGNG
>>553-555の笑いどころが理解できない
0557デフォルトの名無しさんNGNG
>>556の笑いどころが理解できない
0558デフォルトの名無しさんNGNG
void func()
{
return void;
}

int main()
{
func();
}

結果:コンパイルエラー
結論:C++はvoidを返値として使えるというのは嘘です。
0559デフォルトの名無しさんNGNG
int func()
{
return int;
}

int main()
{
func();
}

結果:コンパイルエラー
結論:C++はintを返値として使えるというのは嘘です。
0560デフォルトの名無しさんNGNG
( ゚д゚)ポカーン
0561デフォルトの名無しさんNGNG
m9(^Д^)プギャー
0562デフォルトの名無しさんNGNG
>>558-559
すれ違い
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0563デフォルトの名無しさんNGNG
>>558
観測対象の選択を誤っている
0564デフォルトの名無しさんNGNG
なんとなくぬるp
0565デフォルトの名無しさんNGNG
main()
{
char a;

(int)a = 0;
}

結果: コンパイルOK
結論: 標準変換の結果は左辺値であるというのは本当です。
0566デフォルトの名無しさんNGNG
>>565
error出たぞ
0567デフォルトの名無しさんNGNG
test.cpp(5) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
test.cpp(6) : warning C4508: 'main' : 関数に戻り値の型が指定されていません。戻り
値を void 型と見なします。
0568デフォルトの名無しさんNGNG
リソースファイルの書き方が詳しく乗ってるサイト知りませんか?
検索したのに見つかりません
0569デフォルトの名無しさんNGNG
>>568
リソースファイルってもいろいろあるわけなんだが…
0570568NGNG
bcc + winAPI
のです。
英語出来ないので日本語のページでお願いします
0571デフォルトの名無しさんNGNG
英語できないならプログラミングも止めたら?
0572デフォルトの名無しさんNGNG
>>571
うっせー馬鹿。シネヨ屑
0573デフォルトの名無しさんNGNG
>>572
人間やめたら?
0574デフォルトの名無しさんNGNG
>>570
http://www.google.co.jp/search?hl=ja&q=%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88&lr=lang_ja
0575デフォルトの名無しさんNGNG
>>517ってdelete[]時にxが必要無いようにするアプローチだと思いますが
これって三次に拡張できますか?
0576デフォルトの名無しさんNGNG
>>575
そりゃできるけど、面倒くさい。vector使え。
0577デフォルトの名無しさんNGNG
boost::multi_arrayの方がいいかと
メモリを連続領域に確保してくれるし
0578デフォルトの名無しさんNGNG
>>573
    ・ ・ ・ ・ ・ ・
俺は人間をやめるぞぉぉ JoJoォォォ
0579デフォルトの名無しさんNGNG
>>576,577
どうもです。
vector使ってますが、517の手法は初めて見たもんでおもしろくて。
やれるのであれば、やってみます。
0580568NGNG
>>574さん
ありがとうございます
調べるキーワードが、見当違いだったみたいです。
>>572さん、落ち着いて
0581デフォルトの名無しさんNGNG
ISO/IEC 14882:1998とISO/IEC 14882:2003でどこが変わったのか書いてある資料ってありませんか?英語でもかまいません。
規格票には変更点は書いてないようなんですが、あの量を読み比べるのはさすがにつらいので。
0582デフォルトの名無しさんNGNG
>581
1998から2003への変更は正誤表(Technical Corrigenda, TC)の追加なのでそれを追えば良いと思います.
言語のコアな部分に関しては
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#TC1%20Status
で"Status: TC1"となっているもので,標準ライブラリに関しては
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html
で"Status: TC"となっているものがそれに当たります.
上のリストには2003以降で新たにTCとなったものも入ってるかも知れません.
0583デフォルトの名無しさんNGNG
C++でビットマップなどの画像表示とかってできるのでしょうか?
0584デフォルトの名無しさんNGNG
こりゃまた抽象的な質問ですね
0585デフォルトの名無しさんNGNG
質問させてください、仮想関数を持つクラスから菱形継承した場合、
普通のメンバの曖昧さの解決はできると思いますが、仮想関数は
どうなるのでしょうか。試してみたのですが仮想関数の継承でエラー出ました。
以下のようなパターンです↓
class A {
  int i;
  virtual void Hoge(void){i = 0;}
};

class B : virtual public A {
  void Hoge(void){i = 1;}
};

class C : virtual public A {
  void Hoge(void){i = 2;}
};

class D : public B, public C {
};

この場合DにHogeを書けばコンパイルは通りますが、
例えばDでBのHogeを使いたいなんて思ったときどうすればよいのでしょうか?
「多重継承なんか使うな」とかは無しでお願いします
0586デフォルトの名無しさんNGNG
>>584
できる
0587586NGNG
みす。
>>583
0588デフォルトの名無しさんNGNG
>>585
B::Hoge();
0589デフォルトの名無しさんNGNG
レスありがとうございます、すみません仮想継承だということを
書き忘れてました(´・ω・`) (i と Hoge()の実体を一つにしたいわけです
DでHogeを実装しない場合(585のコードそのままだと)
「error C2385: 'C::Hoge' の派生があいまいです。
warning C4385: 可能性 : 'Hoge' がベース 'A' of class 'C' にあります。
warning C4385: または : 'Hoge' がベース 'B' of class 'C' にあります。」
と出ました(´・ω・`) (VC
DにBと同じ内容のHogeを書けば済むのですが、
そんなことしなくても済む方法があればなぁと思いました。
0590デフォルトの名無しさんNGNG
class D : public B, public C {
void Hoge(){ なんか }
void Piyo(){ B::Hoge(); }
}
って意味じゃないの?
0591デフォルトの名無しさんNGNG
クラスの静的メンバ変数を、インラインで定義することはできないでしょうか?
↓こんな感じにやりたいのですが。
class Hoge {
public:
  static const char* name = "ほげ太郎";
};
0592デフォルトの名無しさんNGNG
>>591
できない
0593585NGNG
なるほど!理解力なくてすみませんでした_| ̄|○
コード量も無駄に増えなくて済みますね(菱形継承の時点でアレだけど)、
>>588 >>590 助かりました、どうもありがとうございました!
0594デフォルトの名無しさんNGNG
>>591
環境依存でいいのなら__declspec(selectany)
0595デフォルトの名無しさんNGNG
C++で自作した汎用的なソースが増えたので
自作ライブラリを構築しようかと思っておりますが
名前とか、ファイルのフォルダ分けとかの形式
悩んで作れません。
名前空間使うとdoxygenのhtmlヘルプファイルがわかりにくくなるし
かといって無しだと、何かとぶつかる可能性もあるし(CThread等)
クラス名のプリフィックスにライブラリ名(ここでは、GDKとする)
GDKThreadとつけても、なんかしっくりこない。
3日後には、ププーGDKなんて何かっこつけてんですか?
どうせラッパーでしょ。と自己嫌悪

あと、フォルダ分類。
Graphis/Sound/Input/Window/...等分類しようとしていますが
分類しづらいファイルタイプもあったりするし
#include "Graphics/Texture.h"みたいにわざわざ改装指定めんどいし、
かと言って、全部同じフォルダだと150以上のファイルがごっちゃになるわけで。


自分の優柔不断さに呆れてきました。
ガツンと何か言ってくれ

0596デフォルトの名無しさんNGNG
>>595
公開するインクルードファイルが何でそんなにたくさんになるのやら。
必要最低限だけ公開するようにしたら?
#まさか1クラス1ファイル主義じゃあるまいし。
0597デフォルトの名無しさんNGNG
>>595
名前空間を使え
ディレクトリは細分しちゃえ

迷ったら「boost もそうしてるし」と念じる。
0598デフォルトの名無しさんNGNG
>>596
主義じゃないけどたまに1クラス1ファイルあるかも。

Graphics関連が
Mesh.Texture,Light,Fog,Camera,Sharder,...等たくさんあったり
ひとまとめにした方がいいですかね。
でも、モデルファイル(XFile)が複雑だ
あああ

>>597
boostの構造調べてみます。
みました。細分してみたー。
yaneSDK3みたいになってきた。(´・ω・`)これでいいのかな。

まあああ
整理整頓できない子ですみません。

とりあえず、名前空間は導入
名前空間使う言語って少数派じゃない?
きもいけど慣れたら大丈夫かな

こうなったら、たくさんC++機能利用してやるか。

古い人に教わってたから
変な呪いがかかってるんだ。
C依存考慮、固定少数の呪縛や、速度、容量(数KByte)気にしすぎたりとか。
0599デフォルトの名無しさんNGNG
Javaのパッケージは高度な名前空間と言えなくもない。
0600デフォルトの名無しさんNGNG
パッケージが羨ましい

namespace MyName{

   伺か

}
↑
閉じるのめんどくさい。
0601デフォルトの名無しさんNGNG
伺かかよ
0602デフォルトの名無しさんNGNG
deleteすんのめんどくさい
0603デフォルトの名無しさんNGNG
そこでD言語ですよ
0604デフォルトの名無しさんNGNG
そこでBoehmですよ
0605デフォルトの名無しさんNGNG
j a v a
0606デフォルトの名無しさんNGNG
BCBからSQLiteを操作するのに参考になるサイトを教えてもらえませんか?
0607デフォルトの名無しさんNGNG
たぶんスレ違い
Builderスレ
0608デフォルトの名無しさんNGNG
C++Builder相談室 Part12
http://pc5.2ch.net/test/read.cgi/tech/1099238936/
0609デフォルトの名無しさんNGNG
ひまわり言語
0610デフォルトの名無しさんNGNG
>>596
そんなもん人の勝手
0611デフォルトの名無しさんNGNG
>>600
namespace MyName{

   伺か

\e
0612デフォルトの名無しさんNGNG
C以外の何か with class

                                  \e
0613デフォルトの名無しさんNGNG
今初めてえんい〜の意味を知った
そのままだったのね
0614デフォルトの名無しさんNGNG
C with classがあるのにD without classがないのはなぜだろう
0615デフォルトの名無しさんNGNG
>>613
そのまま??
わからんおせーて
0616デフォルトの名無しさんNGNG
>>614
みんな君ほど頭がヒマじゃないからだと思う。
0617デフォルトの名無しさんNGNG
>C with classがあるのに

ねえよ、少なくとも C++ の系譜上にそんなのは
禿のサイトでも調べてからもの言えよまったく
0618デフォルトの名無しさんNGNG
C with class 696件
http://www.google.co.jp/search?num=50&hl=ja&newwindow=1&c2coff=1&q=%22C+with+class%22&lr=

C with classes 4,880件
http://www.google.co.jp/search?num=50&hl=ja&newwindow=1&c2coff=1&q=%22C+with+classes%22&lr=
0619デフォルトの名無しさんNGNG
STLのvectorコンテナについてわからないことがあるのですが

int型を格納する場合は
vector<int> array;
int data;
ary.push_back(data);
のように単純ですが

自作のクラスを格納する場合は
vector<JisakuClass> array;
JisakuClass *aaaa = new JisakuClass;
ary.push_back(*aaaa);

この場合は2行目のnewで確保したメモリは
ary.clear();
などしたときにSTL側で開放処理をしてくれるのでしょうか?
それとも自分で開放しなければいけないのでしょうか?自分で開放するのでしたら
どのタイミングで開放すればいいのでしょう・・・

vector<JisakuClass> array;
JisakuClass data;
ary.push_back(data);

そしてこのようにした場合、dataがスコープ外にでて消滅した場合でもvector内のデータは大丈夫なのか
その辺の関係がわかりません
簡単にでもいいので助言をくださいませ
0620Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>> C++NGNG
>などしたときにSTL側で開放処理をしてくれるのでしょうか?
いいえ。
>それとも自分で開放しなければいけないのでしょうか?
はい。
newによって割り当てられたオブジェクトへのポインタがコンテナに格納されている場合は
自分で全部deleteしてまわる必要があります。

>自分で開放するのでしたら
コンテナを破棄する前に自分で解放する必要があります。

>そしてこのようにした場合、dataがスコープ外にでて消滅した場合でもvector内のデータは大丈夫なのか
大丈夫じゃありません。

>簡単にでもいいので助言をくださいませ
see also boost::shared_ptr
0621デフォルトの名無しさんNGNG
>>619
push_back()でpushされるJisakuClassのオブジェクトは、JisakuClassのコピーコンストラクタ
によって生成されたオブジェクトです。
これはstd::vectorのclear()時にJisakuClassのデストラクタを呼び出してくれますが、元々
newで確保した方のオブジェクトはそのままです。
push_back()でstd::vector()に入れられるオブジェクトと、newで生成したオブジェクトは別の
物である事を理解しましょう。
0622デフォルトの名無しさんNGNG
619です

あくまでvectorコンテナに格納されるものはコピーコンストラクタによって
作成されたオブジェクトであって、コピー元のデータは自分で処理をする

vectorにクラスを格納する場合、STLが開放処理をしてくれる
vectorにクラスへのポインタを格納する場合、clearするまえに自分で開放する

要約するとこういうことになるのでしょうか

もっと勉強しよう・・・( ´・ω・`)
0623デフォルトの名無しさんNGNG
お礼をわすれてました。
ありがとうございます
0624デフォルトの名無しさんNGNG
>>622
push_bnack()の実現方法によっては、コピーコンストラクタではなくて代入演算子
で書かれているかもしれないので、一応両方用意しておくのが鉄則。

と言っても、クラス内部でnew/deleteするようなクラスでないと必要ないがな。
0625デフォルトの名無しさんNGNG
>>619
オブジェクトの生成、解放はSTLコンテナにすべて一任するのが楽。
だから、newしたものを突っ込むんじゃなくて値をそのまま突っ込むべし。
0626デフォルトの名無しさんNGNG
>>620の痛さが光るな。氏んでいいよw

>newによって割り当てられたオブジェクトへのポインタがコンテナに格納されている場合は
>自分で全部deleteしてまわる必要があります。

vector<JisakuClass> array;って明記してあるのに、
勝手にvector<JisakuClass*>の話に勘違いした挙句

>>そしてこのようにした場合、dataがスコープ外にでて消滅した場合でもvector内のデータは大丈夫なのか
>大丈夫じゃありません。

100%ウソ回答ww

vector<JisakuClass> array;

{
  JisakuClass data;
  array.push_back( data );//ここでdataのコピーがarrayに追加される
}//ここでdataが破棄される

arrayに入るのはdataのコピーなので、dataが破棄されても全然平気です。
0627デフォルトの名無しさんNGNG
変なのがいるな。
0628デフォルトの名無しさんNGNG
幸いnew/deleteは使っていない単純なクラスなので
デフォルトのコピーコンストラクタ(というか無し)で
問題なさそうです

もしクラス内部にまた別のvectorコンテナとmapコンテナが入っている場合は
特殊なことが必要なのでしょうか・・・?

0629デフォルトの名無しさんNGNG
何も必要ありません。
0630デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C++
とか書いている馬鹿がいるスレはココですか?
0631デフォルトの名無しさんNGNG
rubyユーザって痛い人が多いの?
0632デフォルトの名無しさんNGNG
>>626
俺も>>620のような内容を書きかけて、>>619をよく読んで「オブジェクトへのポインタ」の問題じゃ
なかったから投稿やめたのに。

>>628
>>629さんが答えているけど、コンテナがデータメンバなら必要ない。但し、コンテナへのポインタ
だと代入演算子とコピーコンストラクタが自前で必要になる。
0633デフォルトの名無しさんNGNG
>>631
まぁ、教祖が痛いから。
0634デフォルトの名無しさんNGNG
619です。

コピーされると思っていなかったため最初の質問分が既にトンチンカンでした
ごめんなさい

動的確保したメモリなどを使っていると、コピーしたときに
コピー先とコピー元でポインタがかぶるためコピーコンストラクタで
自分で確保しなおしてあげることが必要ということでしょうかね

625さんがおっしゃられているように、クラスもクラスの内部も
すべてnew/delete等を使わない設計のほうが楽チンなので
そうすることにします。

教えてくださったみなさま助かりました(`・ω・´)
0635デフォルトの名無しさんNGNG
>>634
そそ。領域がかぶると、一つの動的に確保したデータメンバを書き換えただけですべてのその
クラスのデータメンバが書き換わってしまうだけでなく、多重deleteによりプログラムが不正終了
する原因になるからタブーなのね。

コピーコンストラクタと代入演算子で、動的なデータメンバの中身も自分でコピーしてやる事に
より、それぞれが別々の実体を持つようになり、そのような問題はなくなる。
0636デフォルトの名無しさんNGNG
STLコンテナにポインタを格納するのは主に継承によるポリモーフィズムを
使うときなど。
0637デフォルトの名無しさんNGNG
んで、ついつい面倒になるのでboost::shared_ptrを使いたくなるけど、そうするってえと
std::mem_fun()が使えなくなるから、boost::bindやboost::mem_fnを使うようになり、
ますますboostにはまっていくという罠。
0638デフォルトの名無しさんNGNG
const_castの挙動が理解不能な件について

#include <iostream>
using namespace std;
int main()
{
const int a=100;
int *pa=(int *)&a;
*pa=200;
cout<<&a<<" "<<pa<<endl;
cout<<a<<" "<<*pa<<endl;
return 0;
}

実行結果
0013FED4 0013FED4
100 200

なぜですか。
0639638NGNG
あ、const_cast使ってなかった。
int *pa=const_cast<int *>(&a);
としても同様。
動作確認はVC++.net2003で。

アドレスが同じなのになぜ値が違うんだ……
0640デフォルトの名無しさんNGNG
>>636
継承によらないポリモーフィズムってあるんですか?
0641デフォルトの名無しさんNGNG
>>640
一言多い天の邪鬼め。
0642638NGNG
*((int *)&a) と *((const int *)&a) の値が違うらしい。ますます理解不能
0643デフォルトの名無しさんNGNG
const_castを嬉々として使う奴を初めて見た
0644デフォルトの名無しさんNGNG
>>640
テンプレートや関数オーバーロードだって広義のポリモーフィズム。
0645デフォルトの名無しさんNGNG
>638
ローカルなconst valueが定数に最適化されるからでしょ。
実体を伴う必要はないから。
*(int *)&a も、中身はただのaであることがコンパイラには分かるから。
0646デフォルトの名無しさんNGNG
const intの方は定数リテラル的に扱われてるのかもね。
だめじゃんw
0647デフォルトの名無しさんNGNG
ていうかconst_castっていつ使うの?元々constにしなかったら
いいだけじゃないの?と燃料投下。
0648デフォルトの名無しさんNGNG
こちらへどうぞ。
【C++】 const だけでメシが3杯食えちゃうスレ
http://pc5.2ch.net/test/read.cgi/tech/1078193971/l50
0649デフォルトの名無しさんNGNG
>>647
じゃなくて、static_cast、reinterpret_castと分類してしまったから、必然的にconst_cast
が必要になったんだろ。
dynamic_castはC++特有の物だから別格。
0650デフォルトの名無しさんNGNG
>>649
必然的にってのを詳しく
0651デフォルトの名無しさんNGNG
で、10種類はまだですか?
0652デフォルトの名無しさんNGNG
既存のCのキャストの代用として、static, reinterpret, dynamicを作ったけど、
これらのキャストのどれにもconst hoge => hoge の変換はしっくり来ない。
だからconst_castが導入された、と>649は言いたいのではないかと。
0653デフォルトの名無しさんNGNG
スレ違い
0654653NGNG
ごめん
0655デフォルトの名無しさんNGNG
mutable
0656638NGNG
なるほど、最適化されて実行時にはすでに定数、と……
参考になったトンクス
0657デフォルトの名無しさんNGNG
いや、目の付け所は悪くないんだけどね・・・
ローカル変数なんだし、ポインタ参照されてる時点で
最適化をやめるぐらいのココロイキがほしいところだ
0658デフォルトの名無しさんNGNG
>>656
そしてまた、規格票を確認もせずに与太話を強固にプリンティングされたアフォが1匹増えたわけか

undefined hehavior
unspecified behavior
implementation defined behavior
well formed
ill formed
0659デフォルトの名無しさんNGNG
>>658
そういうチミは、今回のconst_castの件はセクションどこなのか即答できるのかね。
俺は探してる所だ。
0660デフォルトの名無しさんNGNG
>>652
C++になってconstポインタからポインタへの変換を廃止するか、
reinterpret_cast扱いにするかって選択肢もあったような気がするわけよ。
0661デフォルトの名無しさんNGNG
>>659
§5.2.11.7だと思うが。
undefined behavior。つまり未定義。
0662デフォルトの名無しさんNGNG
>>661
参りました。師匠と呼ばせて下さい。
0663デフォルトの名無しさんNGNG
>>659
は? それは有料です
教えてくれそうな会社をディレクトリで探して聞いてみて下さい
もしかして、私が答えてるかも知れませんね
0664デフォルトの名無しさんNGNG
>>662
いや、君のような出来の悪い弟子は(゚�听)イラネ。
0665デフォルトの名無しさんNGNG
>>664
Ruby最高?
0666デフォルトの名無しさんNGNG
で、プリンティングって何?
0667デフォルトの名無しさんNGNG
洋菓子の一種
0668デフォルトの名無しさんNGNG
私はライスプディングがどうしても食べられないんだ。
0669デフォルトの名無しさんNGNG
俺も…なんかぐちょぐちょして甘くて気持ち悪い
0670デフォルトの名無しさんNGNG
イギリス行ってM&Sあたりで適当なケーキ類買ってみれ。

日本で売ってるライスプディングなんてまだぬるかったと思い知らされるから。。
0671デフォルトの名無しさんNGNG
イギリスで食っていいのはフィッシュアンドチップスと中華とイタリアンとマクドナルドだけだ。
0672デフォルトの名無しさんNGNG
インド料理を忘れないでくれ
0673デフォルトの名無しさんNGNG
>>670
ちょっと用事でイギリス行った時にホテルで食べたんだけど、やっぱり日本人には
ミルクとご飯の組合せはダメだね。
0674デフォルトの名無しさんNGNG
サンドイッチと、コーンフレーク類(本格的なやつね)はかなり美味しい。

イギリス行くなら、朝コーンフレーク、昼サンドイッチ、夕中華orインド料理で耐えるといい。
0675デフォルトの名無しさんNGNG
日本人にとって、ミルクとご飯の組み合わせとは、給食の残りを
残飯として混ぜ込んでいたときの光景を想起させるものである。
0676デフォルトの名無しさんNGNG
鶏肉の中華粥、ミルク味すきだけど・・・
0677デフォルトの名無しさんNGNG
BSEパイってイギリスだっけ?
0678デフォルトの名無しさんNGNG
マイクロソフトのビルゲイツ(敬称略)が、「いいプログラマになるためには、天才プログラマが書いたプログラムを
読むのがよい」といったらしいのですが、
それを聞いて、自分も天才プログラマが書いたC++プログラムを読みたいと思ったのですが、
で、最近オープンソースが話題になっており、何か参考になるようなフリープログラムはないですかねぇ?
紹介していただくとうれしいです!
0679デフォルトの名無しさんNGNG
firefox
0680デフォルトの名無しさんNGNG
gcc linux
0681VC++ですNGNG
#import "c:/Program Files/Microsoft Office/Office/MSO9.DLL"
#import "C:/Program Files/Common Files/Microsoft Shared/VBA/VBA6/VBE6EXT.OLB"
// windows.h に DialogBox などが定義されているため、リネームで回避する
#import "c:/PROGRAM FILES/MICROSOFT OFFICE/OFFICE/EXCEL9.OLB" \
rename("RGB", "RBGXL") \
rename("ExitWindows", "WordExitWindows") \
rename("DialogBox", "DialogBoxXL") \
rename("DocumentProperties", "DocumentPropertiesXL")

こういう感じでEXCELとワードのVBAをVC++からつかえるようにしたのですが、

BSCMAKE: warning BK4502 : 切り捨てられた .SBR ファイル '.\Debug\StdAfx.sbr' は Debug/EightAppSdi.bsc 内にありません。

というエラーが出て、クラスウィザードが使えなくなりました。
助けてください
0682デフォルトの名無しさんNGNG
スレ違い。
0683デフォルトの名無しさんNGNG
>>682
何でですか?
Visual 「C++」の話ですよ。
答えられないなら黙っていて下さい。
0684デフォルトの名無しさんNGNG
>>681
こっち行け
★初心者にVisual C++を教えるスレ★ Part16
http://pc5.2ch.net/test/read.cgi/tech/1101022051/
0685デフォルトの名無しさんNGNG
>何でですか?

#import
0686デフォルトの名無しさんNGNG
Chest! A buttock of a very rare Japanese serow!
0687デフォルトの名無しさんNGNG
CppUnit って、使う価値あるものですか?
簡単に調査した限りでは、あまりテストコードを書く助けにならないような気がするのです。
ライブラリをビルドしたりする分だけ、逆に手間がかかるように思います。
みなさんの率直なご意見をお願い致します。
0688デフォルトの名無しさんNGNG
必要な人には必要とされる。
素人にはおすすめできない。
0689自己レスNGNG
>>681
昨日は調べ方が甘かった・・・
stdafx.hに書けばいいらしい
0690デフォルトの名無しさんNGNG
new演算子をオーバーロードして、それを継承させることはできますか。
具体的には、親クラスでオリジナルなメモリ管理ライブラリをnew演算子にオーバーロード
(ここまでは簡単)、さらに、そこから派生させた子クラスもやはりその独自ライブラリでnew する、
みたいなの。
さらに、子クラスがtemplete で勝手な型を作ったときも、やはり、親クラスが勝手に作った
独自メモリ管理ライブラリがその勝手な型の中で使われないとまずいんです。

以上、何とかしてください。
0691デフォルトの名無しさんNGNG
オーバーロードできるnewは、グローバルなoperator new一つだけじゃなかったでしたっけ。
0692デフォルトの名無しさんNGNG
>>690
>さらに、そこから派生させた子クラスもやはりその独自ライブラリでnew する、
>みたいなの。
これは普通に出来る。

>さらに、子クラスがtemplete で勝手な型を作ったときも、
どういう事?
0693デフォルトの名無しさんNGNG
>>690
Effective C++7項〜10項
More Effective C++項目8

templateについては俺も知らん。
0694デフォルトの名無しさんNGNG
別スレで聞いたのですが答えがなかったのでここで質問させて頂きます。
C++で、読み込みファイルのランダムアクセスをするような、
以下のコードを書きましたが、
ifstream fin;
fin.open("data.txt",ios::in);
  n=fin.tellg();//→n=0

do{
・・・
}while(fin.getline(buf,256));
   n=fin.tellg();//→n=70000
ここでまたデータを最初から読み込むために
fin.seekg(0,ios::beg);
としたところ
     n=fin.tellg();//→n=-1
となってしまいうまく行きません。
ご教授いただけないでしょうか。
0695デフォルトの名無しさんNGNG
>>694
一度最後まで読み切ってしまうとEOFフラグが立って、
それ以降ストリームが無効になると思われ。

fin.clear(); してみては?
0696デフォルトの名無しさんNGNG
>>694
seekg() の直後にエラー判定して std::perror() でも出してみると、原因がわかるかもしれん。
0697694NGNG
695さん、696さん、ありがとうございました!!
fin.clear();で解決できました。

ただ、fin.seekg(0,ios::beg);の後に
perror("perror says :" );としたところ、うまくできる時
(clesrしたとき)もうまくいかない時(clearしないとき)も
同じ値でした。エラーにはなってないのですかね。

0698デフォルトの名無しさんNGNG
>>697
clear() でいけたんなら、ストリームインスタンスだけの問題。
errno は関係ない。
0699デフォルトの名無しさんNGNG
perror(errno)は、単に、クリアされないまま
前回エラーが起きた時(読み込み時にEOF)の値が残っているのでは
0700694NGNG
>699さん
説明不足でしたが、clearした場合としない場合でそれぞれ実行した結果、
perror("perror says :" );で、perror says : No error
と出ましたので、(よく知らないですが)stream instanceの問題のようです。
0701デフォルトの名無しさんNGNG
C++標準でのエラーとは「規格とは外れた動作」を指すんじゃないんでしょうか?
EOFが返ってくるのは規格と適合しているからエラーではないのでは
0702デフォルトの名無しさんNGNG
エラーの意味の取り方の違いでしょ?
何を基準に考えてるかっていうかね、そんな感じ。
0703デフォルトの名無しさんNGNG
すみません、教えてください。
Cの構造体をC++でも使いたいのですが、どのようにすればいいのでしょうか?

<test2.c>
#include "test2.h"

AAA aaa;

<test2.h>
extern struct AAA {
int int1;
char str[256];
} aaa;

<test1.cpp>
#include "test2.h"

???


↑こんな感じで使いたいです。
また、構造体を使うほかにCとCPPで値を共有する方法などはあるでしょうか。
宜しくお願いします。
0704デフォルトの名無しさんNGNG
.cから.cppのhoge関数を使いたい場合は、

// hoge.cpp

extern "C" {
void hoge() {…}
}

あとCの構造体はそのままcppでも使えると思うけど
0705デフォルトの名無しさんNGNG
>>703
Cだとstruct AAA aaa;じゃないか?
0706703NGNG
704さんありがとうございます。
Cの構造体は普通に使えるんですね。

includeして実際にやってみまして、コンパイルは通りました。
が、実態がないようで、値の代入が出来ません。
デバッガで値を見ると、アドレスはあるみたいなのですがポインタ参照みたいになっています。

aaa : struct AAA * aaa

みたいな感じです。
Cで実態を持たせてるのですが、CPP側でもincludeのほかになにかやらなければいけないことがあるのでしょうか?
0707デフォルトの名無しさんNGNG
>>706
根本的なことが分かってない気がする
0708デフォルトの名無しさんNGNG
>>705,706
ああスマンコ
Cでは
struct AAA { ・・・ };
で使用は
struct AAA hoge;
だけど、C++ではstructはclassと同じ扱いだから
AAA hoge;
だけでいい
0709デフォルトの名無しさんNGNG
> 705さん、708さん
ありがとうございました。
どうにかできているみたいです。
C++だとクラスと同じ扱いになるんですね。
0710デフォルトの名無しさんNGNG
>>709
C++でのclassとstructの違いは省略時にpublicになるかprivateになるかだけ。
0711デフォルトの名無しさんNGNG
newの戻り値がnullかどうかってチェックするべきなんでしょうか?
今までVC6を使ってたんで一応、

char* ptr = new char[5]
if (!ptr) return;

みたいにしてたんですが、
VC7.1ではnewが失敗したら例外をなげるから、
if (!ptr) return; は無意味になる。

nullチェックってもう忘れちゃってもいいんでしょうか?
0712デフォルトの名無しさんNGNG
例外を投げるのが標準だから、
VC6を今後使うつもりがないなら無視してOK。
0713デフォルトの名無しさんNGNG
一応、Mozillaのコーディングスタイルでは
newの後のnullチェックを義務づけてるけどね
0714デフォルトの名無しさんNGNG
>>712
ありがとうございます。
VC7以降なら標準にしたがって堂々と無視してOKってことですよね。

VC7以降と6で大幅に違うのってこれくらいでしょうか?

今はまわりがVC6から7.1に移行してる段階なんでいろいろ混乱がありそうです。
0715デフォルトの名無しさんNGNG
>>713
それも気になっていました。
Mozillaの場合は例外自体を使えない(発生しない)ようにしてる、は間違いですか?
0716デフォルトの名無しさんNGNG
>>714
テンプレートの部分特殊化の有無は
newが例外投げるより大きいんじゃなかろうか…
0717デフォルトの名無しさんNGNG
>>716
テンプレートの部分特殊化・・・、えーと、勉強してきます・・・orz
0718デフォルトの名無しさんNGNG
<new>ヘッダをインクルードしてnewをnew(nothrow)に変更すれば、古いnewと同じ動作をする。

#include <new>

char* ptr = new(nothrow) char[5] 
if (!ptr) return; 
0719デフォルトの名無しさんNGNG
>>718
using書いていないからnew(std::nothrow)ってつっこみはおいといて、
俺んとこは<new>をインクルードしなくてもnew(std::nothrow)が使えるんだけど、
<new>をインクルードしたほうがいい?
0720デフォルトの名無しさんNGNG
>>714
for の初期化部で宣言した変数のスコープがfor内部のみになった。
#つまりISOに準じた。

STLを使っても識別子の長さオーバーの警告が出なくなった。

CStringがテンプレートクラスになった。
#おまけでエンバグしたり仕様が変わった。
0721デフォルトの名無しさんNGNG
>>719
std空間はいかにしてソースに組み込まれたのであろうか?
インクルードヘッダが一切ない状態で試してこそ、真の漢である。
0722デフォルトの名無しさんNGNG
>>720
使えちゃったり。(VC7.1)

for(int i = 0; i < 10; ++i){ /* 何か */ }
i += 10; // OK
for(int i = 0; i < 10; ++i){ /* 何れか */ }
i += 10; // OK
0723デフォルトの名無しさんNGNG
>>722
俺もそれ気になってた、vc6.0では無理とか言ってるやつがいたから試したけど.netでも普通に使えた
0724デフォルトの名無しさんNGNG
//map<wstring, wstring> mapss;
//wstring tmp;

tmp = _T("key");
tmp += _T(" ") + mapss[tmp];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~のところの式は合っているんでしょうか?
0725デフォルトの名無しさんNGNG
>>722
VC6互換にすると二番目のforでエラーにならないか?
ISO準拠なら当然代入がエラーな訳だが。
#ディフォルトがVC6互換なのは困ったもんだが。
0726デフォルトの名無しさんNGNG
>>724 「式が合っている」とは?
0727デフォルトの名無しさんNGNG
>>725
VC7.1ではエラーにならなかったりする。
ただ、VC6では >>722 のコードはエラーになる。
(C2374 : i が2回宣言されているぞ)

つまり、VC7.1では、状況が悪化していると…
0728デフォルトの名無しさんNGNG
>>727
悪化はしてないと思うが、
forスコープの外でiが使えるのは気持ち悪いな
0729デフォルトの名無しさんNGNG
>>721
俺の負けだ。
何もインクルードしていないときはnothrowはstd::付ける付けない関係なしに無理だった。OTL
0730デフォルトの名無しさんNGNG
>>724
typedef basicstring<TCHAR> tstring; // _TCHARでも可
map<tstring, tstring> mapss;
tstring tmp;
tmp = _T("key");
tmp += _T(" ") + mapss[tmp];
上か下か好きな方を選べ。
map<wstring, wstring> mapss;
wstring tmp;
tmp = L"key";
tmp += L" " + mapss[tmp];
0731デフォルトの名無しさんNGNG
>>726
>>730
レスありがとうございます
「式が合っている」とは、tmp += _T(" ") + mapss[tmp];でtmpに代入しますよね
その時にmapssでがちゃんと[tmp]をキーとして使えるのかなと思っただけです、よく考えたら使えますよね orz
=の右辺は一回どこかのバッファにためられてから左辺に代入してるのかな(わからないです)

すみませんbasicstringってなんですか、下のでも似たようなことが出来そうですけど
#define UNICODE
 typedef wstring tstring;
#else
 typedef string tstring;
#endif
0732携帯 ◆QkYL666666 NGNG
どこにカキコすればいいのかわからないのでここにカキコします。
情報工学科の大学一年です。
学校でC言語の講義があってLinuxを使っています。
自分はすごく苦手で毎日空き時間は学校のパソコン使って練習しています。
課題はできるのですが試験が全く出来ません。
例えば課題の例を出しますと、
毎日の睡眠時間を読み込んでその最大値と最小値と何日目であるのかを示すプログラムをかけ。
というようなものでそのようなものならできますが、試験では
データの数(これはなんとかできます)、データの合計を秒単位と時間分秒で表す、最大値を分単位で表す、最小値を秒単位で表す、日毎の変動時間の平均値を分単位で表す、変動時間が一時間以上である回数
を表させるようにもっと複雑になってしまい何も出来ないです。
いつも数式を立てるのは紙に書けばすぐできますしフローチャートも順調に書けます。
けどプログラムをパソコンで組むと作れないことが多いです(コンパイルでは異常ないけど実行すると目茶苦茶な結果が出て来る)
どうすれば解決できるようになりますか。他の筆記科目(微積、線形代数、力学、電磁気、化学、英語、回路講義、計算機についての講義等パソコンではなくペーパー試験)はだいたい8割以上とれるけど、このプログラムだけは半分もとれません。
やっぱり基礎が出来ていないからですかね。一応家には学校で支給されたKNOPPIXというのがあるので実家に戻って使う予定です。
0733デフォルトの名無しさんNGNG
>>732
で、何が聴きたいんだ?
とりあえず普段頭と紙だけで考えて、実際に動かしてないだろ。
0734デフォルトの名無しさんNGNG
>722-
ttp://www.tietew.jp/cppll/archive/11282
このトピックなんかも参考に。
0735デフォルトの名無しさんNGNG
732
必要な道具(関数)を考えろ。外部設計の基礎だ。
0736デフォルトの名無しさんNGNG
>>732
あー、いるいる。そういう奴。
初めから大風呂敷ひろげすぎては自爆を繰り返す藁パターンな。
(何を隠そう若き日の俺だったりするが)

まずシンプルに徹したVer1を確実に押さえてから少しずつVer-upすれ。
もともと複雑怪奇な問題はより単純な問題に分解することを再帰的にやれ。
気長な話だが、短気な性格にも活かし方はある。
0737デフォルトの名無しさんNGNG
>>731
basic_stringはstringやwstringの実体。ここからtypedefされている。
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
お前の#ifdef UNICODE〜#endifとtypedef basic_string<TCHAR> tstring;は結果は同じ、好きな方を選べ。
0738デフォルトの名無しさんNGNG
TCHARが short だったりしてな。
0739デフォルトの名無しさんNGNG
>>738
せめてunsigned shortだろ。
0740デフォルトの名無しさんNGNG
templateなstaticメンバ変数だけヘッダで初期化できるのは不公平だと思います!
0741デフォルトの名無しさんNGNG
http://www.rubyist.net/~matz/20041227.html#p03
Ruby以外の言語は糞であるとRuby作者自身が明言した!
0742デフォルトの名無しさんNGNG
>>740
C++使いにはいくつかの禁句があることを知れ
0743デフォルトの名無しさんNGNG
<<で出力とかばっかじゃねぇの?

とか?
0744デフォルトの名無しさんNGNG
>>743
それはむしろC++使いも同意だったりするんじゃないかと
0745デフォルトの名無しさんNGNG
データはストリームに流すんだ
と心の中で100回唱えれば納得できる
0746デフォルトの名無しさんNGNG
ロシア語で考えるんだ!
пиписка!!
0747デフォルトの名無しさんNGNG
ズドラーストヴィーチェ!
0748デフォルトの名無しさんNGNG
<<で出力ってそんなにまずいのか?
bit shiftと似て左に流れる=出力って分かりやすい気がするが
cout << 'string'; で標準出力に流れていくみたいな

ただ、<<がC++の最高の応用例と書かれていたり
最悪の応用例と書かれていたりかなり両極端だよな
0749デフォルトの名無しさんNGNG
iostreamの演算子オーバーロードは間違いなく邪悪。

演算子の意味把握するのにいちいち連想ゲームさせるな
0750デフォルトの名無しさんNGNG
lhs = rhs で左辺に代入されるから

 cout << "string";
 a_variable << cin;

が自然だと思うんだけどな…
0751デフォルトの名無しさんNGNG
cout << "string" << cin;
string foo;
cout << foo << cin;
0752デフォルトの名無しさんNGNG
Rubyの方が100倍美しく10倍効率的。
0753デフォルトの名無しさんNGNG
<<,>>演算子は、可変引数をもつ関数解決のための別アプローチだろ。
0754デフォルトの名無しさんNGNG
>>752
そして10倍以上遅い
0755デフォルトの名無しさんNGNG
cinってなんて読むのですか?
0756デフォルトの名無しさんNGNG
シーイン
0757デフォルトの名無しさんNGNG
input 〜 from console
0758デフォルトの名無しさんNGNG
昔、cout を コート と読んでいたのは秘密だ
0759デフォルトの名無しさんNGNG
こうとな・・・・・・質素で上品な。けばけばしくなく上品な。「若いのにえらいこうとなもん着たはりますなあ。」
0760デフォルトの名無しさんNGNG
>>754
OCamlだったらSTLばりばり使ったC++より速いよ
0761デフォルトの名無しさんNGNG
>>760
速度有利なものと速度不利なものを比較して何が言いたいんだ?
0762デフォルトの名無しさんNGNG
質問です。
classのメンバーに別のクラスを含んだんですが
その別のクラスのメソッドを、包括するクラスのメソッドとしても
実行できるようにしたいんですが
別クラスhoge
void test(void);

包括クラスage
void (*test)();

test=this->test;

としたのですが
メンバー関数は呼び出すかそのアドレスをとらなければならないと言われます。
どうすればいいでしょう。
0763デフォルトの名無しさんNGNG
class hoge {
public:
 void test() {}
};

class age {
 hoge _hoge;
public:
 void test() { _hoge.test(); }
};
0764デフォルトの名無しさんNGNG
>>762
メンバ関数ポインタとか調べてみれ
0765デフォルトの名無しさんNGNG
>>763,764
ありがとうございます。
勉強します。
0766デフォルトの名無しさんNGNG
>>760
そもそもC++で作ったプログラムの実行速度なんて同じハードウェア環境下でも
処理系やコンパイルオプションによって雲泥の差があるんだから
その手の情報のほとんどは全然あてにならん。
0767デフォルトの名無しさんNGNG
Java だと toString メソッドを出来るだけ書けっていわれますが、これってC++にも当てはまりますか?
0768デフォルトの名無しさんNGNG
>>767
当てはまらない。
JavaはObjectクラスがtoStringを持ってるからオーバーライドすべきなの。
C++ならシステムがクラス名を必要とするときだけ同等のことをすれば良い。
0769デフォルトの名無しさんNGNG
>>761
速度有利なものと速度不利なものを比較しないと勝てないくらい実行速度に差があるって事だろ?
そもそもRubyとC++では土俵が違うし、それを無理やり比較して勝とうとするのは・・人はそれを厨と呼b・・(ry
言語間の違いを理解して目的に応じて使い分けるのが賢いやり方だろう。
(勿論、それだけで全てをこなすエキスパートの技術は素晴らしいと思うがな)

まぁ、どの程度実行速度に差があるのかは検証した事ないし
>>766の言う様に状況に寄って結果も変動するからねぇ
0770デフォルトの名無しさんNGNG
要求を聞いた時点から言語の選択を誤り更に修正できない香具師は痛い
0771デフォルトの名無しさんNGNG
>>757
cout は char* out じゃないか?
0772771NGNG
×cout/out
○cin/in
0773デフォルトの名無しさんNGNG
>>771-772
そんなばかな
0774デフォルトの名無しさんNGNG
const_reverse_iterator を const_iterator に変換するにはどうすればいいの?
とりあえずvectorの場合で。
0775デフォルトの名無しさんNGNG
.base()
0776デフォルトの名無しさんNGNG
advance と distance を使う
0777デフォルトの名無しさんNGNG
>>775
おぉ、サンクスコ。
0778デフォルトの名無しさんNGNG
>>776
あぁ、そういうのもあったね。忘れてた...
iterator使い鳴れないもんで..
0779デフォルトの名無しさんNGNG
もひとつお願い。
vectorのある位置を指すiteratorってどうやって表すのがスマート?
vector<int> v;
const_iterator f(int idx) { return v.begin() + idx; }
だとちょっとカッコ悪かなと...
0780デフォルトの名無しさんNGNG
>779
それでいいんでない?
vectorのイテレータはランダムアクセスイテレータなんだから
わざわざadvanceを使ったりすることもないべ。
0781デフォルトの名無しさんNGNG
&v[idx]から変換できないのかなと思って...
だめ?
0782デフォルトの名無しさんNGNG
漏れは統一目的でadvance使った方がいいと思うけど
0783デフォルトの名無しさんNGNG
std::vector<T>(ただしT != bool)に限っては、その保持するデータのメモリ
上のレイアウトが配列と同じでなければならないという訂正が規格に入った
から、v.begin() + (&v[idx] - &v[0])で間違いではないだろう。iteratorと
ポインタの同一視は一般的にはあまりよくないだろうが。
0784783NGNG
ん?何か俺頓珍漢なことを言ってるな。忘れてくれ。
0785デフォルトの名無しさんNGNG
>>782
ちなみに、advance()使った場合はどう書けばいいの?
const_iterator i;
advance(i, idx);
return i;
とか?
return &v[idx];
くらいに簡単にしたいんだけど...
0786デフォルトの名無しさんNGNG
小数の下の0の除去。例えば
0.0012300
これを
0.00123
にする場合、みなさんならどういう方法でやりますか?
0787デフォルトの名無しさんNGNG
string str="0.0012300";
double num;
num = lexical_cast<double>(str);
str = lexical_cast<string>(num);
cout << str << endl;
0788デフォルトの名無しさんNGNG
boostライブラリ?
0789デフォルトの名無しさんNGNG
boost::lexcal_cast<>が楽だろうねぇ。
0790デフォルトの名無しさんNGNG
boost知らなかった。
標準関数やsprintfでは0の除去は用意されていないんですね。
0791デフォルトの名無しさんNGNG
boost使うと「文字列の末尾から'0'を取り除く」と直接書くこともでける
string s = "0.0012300";
trim_right_if(s, _1 == '0');
0792デフォルトの名無しさんNGNG
is_any_of("0")じゃないの?
0793791NGNG
is_any_ofの存在を忘れてマスタ orz
0794デフォルトの名無しさんNGNG
誰か知識を貸してください!

#ifndef __INITIALIZATION
#define __INITIALIZATION
#include "main.h"
void initialization(MAIN_DATA*data);
#endif

をコンパイルすると
e:###initialization.h(6): error C2065: 'MAIN_DATA' : 定義されていない識別子です。
e:###initialization.h(6): error C2065: 'data' : 定義されていない識別子です。
e:###initialization.h(6): error C2182: 'initialization' : 'void' 型が不適切に使用されています。
となりました。
ソースの方は↓でコンパイルは通ります。
void initialization(MAIN_DATA*data)
{
......
}

main.hの中には
typedef struct_MAIN_DATA
{
......
}MAIN_DATA;
としています。

助けてエロイ人。
0795デフォルトの名無しさんNGNG
struct_MAIN_DATA
   ↑なんだこの_は
0796デフォルトの名無しさんNGNG
>>795
タブが消えたんでないの
0797795NGNG
なる
0798デフォルトの名無しさんNGNG
>>785 boost::prior(v.begin(),idx)
0799デフォルトの名無しさんNGNG
next じゃないの?
0800798NGNG
まちがえちゃった。
0801デフォルトの名無しさんNGNG
>>794
根本的な問題の解決方法じゃないが
void initialization(struct MAIN_DATA*data);
としてみそ。
0802デフォルトの名無しさんNGNG
>>801
やってみましたが再定義されていますとのことorz
レスさんくすです^^
0803デフォルトの名無しさんNGNG
>>794
main.h の最終行は改行しているか?
0804デフォルトの名無しさんNGNG
802
typedef int int;
0805デフォルトの名無しさんNGNG
typedef struct→糞 _MAIN_DATA MAIN_DATA
0806デフォルトの名無しさんNGNG
#ifdef __cplusplusplus
#else
#endpg
0807デフォルトの名無しさんNGNG
よくoperatorで戻り型にconstつけて、かつoperator関数にもconstつける
けど、戻り型にconstつけるとoperator関数にconstつけなきゃいけないのは
なぜなんでしょうか?
0808807NGNG
operatorの呼び出し元のオブジェクトをconstな型として扱わないと
constな戻り型で返せないからですかね?
0809デフォルトの名無しさんNGNG
>operatorの呼び出し元のオブジェクトをconstな型として扱わないと
>constな戻り型で返せないからですかね?

はい.ただしデータメンバへの参照を直接返す場合とかの話ですけどね.
0810デフォルトの名無しさんNGNG
struct{
static int a;
int b;
}xx;

本体はstaticではなく、一部のメンバだけstaticって有り?無し?
0811デフォルトの名無しさんNGNG
もちろん、あり。
0812807NGNG
>809
なるほど!!ありがとうございます!
const abcclass operator*(const abcclass &ob)const;
~~~~~ ~~~~~
(1) (2)

(1):戻し型の指定であって、呼び出し元とは関係ない
(2):呼び出し元のオブジェクトを(一時的に)const扱いにする
っていうイメージですかね。
0813807NGNG
あ、半角スペース無視されるんだった。
すいません、(1)ははじめのconstで、(2)は最後のconstです。
0814デフォルトの名無しさんNGNG
>>812
その通りですけれど,そのoperator*の戻り値は一時オブジェクトなので
(1)のconstはあっても無くてもコンパイルは通りますよ.
(このconstを付けるか付けないかはこれはこれでよく議論の火種になりますけど)
0815807NGNG
>814
そうなんですかー。
gccではテンポラリなオブジェクトはなぜかconst扱いになってしまうので
(VCは呼び出し元依存だった気がします)、あってもなくても同じかと
思っていたのですが、議論されるまでのものだったんですかー。
0816デフォルトの名無しさんNGNG
組込型同様左辺値にはならないように互換性をとる
テンプレートの実体化を邪魔して冗長なのでやめれ

こんなとこか
0817デフォルトの名無しさんNGNG
ってかoperatorをconstにするのは当たり前だろ
constテンポラリが呼び出すかもしれないし

>>807は基本からやりなおせ
0818デフォルトの名無しさんNGNG
>>803

改行はしていますよ。
あぁぁぁぁぁ・・・全然すすまない〜><
0819デフォルトの名無しさんNGNG
typedef struct_MAIN_DATA
ナニコレ?
0820デフォルトの名無しさんNGNG
てかそもそもC++ならtypedefいらないし。
0821デフォルトの名無しさんNGNG
入門書を買ったのですが、途中まで親切なのに
AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
#pragma once
が突然出てきて、解説が無くて困ってます
何か良い本ないですか?
0822デフォルトの名無しさんNGNG
その解説書はVC++の本なのでC++の本じゃ無いです。
違う本を買ってね。
0823デフォルトの名無しさんNGNG
まさか年賀状に、

「新年あけましておめでとうございます」

なんて書いちゃった人いませんよね。
0824デフォルトの名無しさんNGNG
>>823
書きましたがなにか。
0825デフォルトの名無しさんNGNG
重複表現ってやつ?
俺は「新年おめでとうございます」って書いたけど
0826デフォルトの名無しさんNGNG
「新年」がどうなってめでたいのか書かないとだめ。
「新年」つまり「新しい年」がめでたいのではなくて、「新年」が「あけた」事がめでたい。
「新年」自体は「あけた」という意味が付随していないから、
「新年あけましておめでとうございます。」
は全く問題ないと思う。
0827デフォルトの名無しさんNGNG
「新年」に「あけた」が付随してるんじゃなくて
「あけた」に「新年が」が付随してるからダメだ、と
年賀状の書き方とかに載ってるよ
0828デフォルトの名無しさんNGNG
gooの辞書によると

あ・ける 0 【明ける/空ける/開ける】
(動カ下一)[文]カ下二 あ・く
(2)時間が経過して次の新しい年・日や季節が始まる。主語を示すことはない。《明》

とのこと。主語を示しちゃいかんそうな。
0829デフォルトの名無しさんNGNG
http://www.nengasyotyuu.com/nenga/nbashic/

なるほどね。OK.
0830デフォルトの名無しさんNGNG
placement-newじゃないですが
void* buf = (void*)new char[sizeof(HOGE)];
Hoge* hoge = (HOGE*)buf;
hoge->hoge(); // コンストラクタ呼び出し
hoge->~hoge(); // デストラクタ呼び出し

これって大丈夫ですか?
delete hoge とかやるとデストラクタ呼び出してくれるんでしょうか。
0831デフォルトの名無しさんNGNG
そいつぁやばいでしょ
0832デフォルトの名無しさんNGNG
>>830
ちゃんと placement-new 使え。
0833デフォルトの名無しさんNGNG
謹賀新年

 本年もご指導ご鞭撻のほどよろしくお願い申し上げます

                     2005年1月
                         ぬるぽ
0834デフォルトの名無しさんNGNG
ガっ
0835デフォルトの名無しさんNGNG
class NullPointerException : public std::logic_error {
0836デフォルトの名無しさんNGNG
ぬるぽってlogic_errorとは限らないんじゃ・・・
0837デフォルトの名無しさんNGNG
struct NullPointerException : public 2ch::nurupo {
 const char* what() { return "ガッ!"; }
};
0838デフォルトの名無しさんNGNG
継承したときのコンストラクタの書き方で質問です。
親クラスParentと、そこから派生したChildがあったとして、
ChildのコンストラクタでParentのコンストラクタも呼びたい時、

Child::Child():Parent(){}
と書くのと、
Child::Child(){
    Parent::Parent();
}
と書くのでは何が違うのでしょうか。
0839デフォルトの名無しさんNGNG
class NullPointerException : public ぬるぽ {
    NullPointerException(const std::string& what) throw(ぬるぽ) : ぬるぽ(0) {}
};

なぜこれが標準でないのか小一時間問いつめたい
0840デフォルトの名無しさんNGNG
>>838
前者は親コンストラクタ->派生コンストラクタと呼ばれるが
後者は親デフォルトコンストラクタ->派生コンストラクタ->親コンストラクタと呼ばれる。
つーか後者みたいな呼び方っていいんだっけ?
0841デフォルトの名無しさんNGNG
コンストラクタ内でthisが絡む事はやっちゃいけないんじゃなかった?
0842デフォルトの名無しさんNGNG
>838 後者はコンパイラによって暗黙的に次のようなコードになる。
0843デフォルトの名無しさんNGNG
// 途中で送信しちまったorz
Child::Child() : Parent() {
    Parent::Parent();
}

だから、親クラスのコンストラクタを2回呼び出していることになる。
0844デフォルトの名無しさんNGNG
貴様らにイイ事を教えてやろう。いや、お前らにとってはバッドニュースになるかな?ククク…。
昨日の練習で俺はボクシングを完全に理解した。なにせボクシングビデオの技はもう全て使いこなせるからな。
ジャブからパリングまで完璧だ。
連れに受けてもらったが全然俺のパンチがかわせない。
スパーリングって奴だな。
もちろん連れの撃つ素人パンチは全然当たらない。
今の俺はプロレヴェルに達してる。
0845デフォルトの名無しさんNGNG
>>838
前者の形でしか呼べませんです。
後者は Parent クラスの一時オブジェクト(this の異なる他人)を作ってるだけだよ。
0846デフォルトの名無しさんNGNG
>>844
SUGEEEEEEEEEEEEWEWWEEEE!!!!!!!
0847デフォルトの名無しさんNGNG
>840-843
No

・・・って答えかかれちゃった
0848838NGNG
なるほど分かりました。
親クラスのコンストラクタは、普通の関数のように呼び出してはいけないんですね。
ありがとうございました。
0849デフォルトの名無しさんNGNG
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }

というマクロはもしinline関数に直すとすると

inline void safe_delete(void* ptr)
{
delete ptr;
ptr = NULL;
}

これでいいのでしょうか?
NULLポインタはdeleteしても問題ないそうなのでif文は省略しました。
0850デフォルトの名無しさんNGNG
>>849
駄目。
駄目だからこそマクロが未だに存在する。
0851デフォルトの名無しさんNGNG
>>849
template <class T>
inline void safe_delete(T*& p)
{ delete p; p = 0; }

これで無問題
0852デフォルトの名無しさんNGNG
>>850
即答ありがとうございます。
素直にマクロ使うことにします。
0853デフォルトの名無しさんNGNG
俺なら>>851を使うかな…
0854デフォルトの名無しさんNGNG
>>851
テンプレートを使うことは考えましたが、ポインタへの参照を使うとは盲点でした。
修行が足りませんですね。回答ありがとうございました。
0855デフォルトの名無しさんNGNG
SAFE_DELETRマクロとの互換性を考えないなら
template <class T>
inline void safe_delete(T** p)
{ delete *p; *p = 0; }

int* hoge = new int;
safe_delete(&hoge);
でもいいんだけどね

あと
>ptr = NULL;
はローカル変数を変えてるだけだから意味ないよ
0856デフォルトの名無しさんNGNG
これは初歩的なミスを…
逝って来ます。
0857デフォルトの名無しさんNGNG
namespaceごとにフォルダを作ってそこにソースを格納した方がいいのでしょうか?
例えば
namespace foo 内にかかれたライブラリ(のソース)は /foo に、
namespace bar 内にかかれたライブラリ(のソース)は /bar に配置、といった具合です。
0858デフォルトの名無しさんNGNG
type_infoのコピーコンストラクタや代入演算子が
private属性に制限されている理由を教えてください。
よろしくお願いします。
0859デフォルトの名無しさんNGNG
>>858
代入などがしたければ type_info へのポインタを使えば十分だから。
0860デフォルトの名無しさんNGNG
> safe_delete
std::auto_ptr 使え。
0861デフォルトの名無しさんNGNG
>>857 良い心がけだと思う。
0862デフォルトの名無しさんNGNG
>>858
理由はない。設計者がヘボだっただけだ。
0863デフォルトの名無しさんNGNG
>>862
(;´Д`)
0864デフォルトの名無しさんNGNG
>>858
太陽が黄色かったから
0865デフォルトの名無しさんNGNG
こいつは見逃せないぜ。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1683.html
0866デフォルトの名無しさんNGNG
微妙に今更感も漂うけどね。
0867デフォルトの名無しさんNGNG
std::ofstream fd( "hoge" );
に文字列を書き出します。
fd << "hoge\n"と
fd<< "hoge" << std::endl;
を比較すると(試したのはもう少し複雑ですが\nをstd::endlに置き換えると)
1.6倍くらい遅くなりました。こういうものなのでしょうか?なんか対策はないですか?
環境は、IntelC++のver.8です。
0868デフォルトの名無しさんNGNG
>>867
それはendlにはバッファのフラッシュの機能が含まれているからです。
よって"hoge\n"だけでは表示されない場合があります。逆に言えば、
何度も改行を行う場合には'\n'の出力によって行い、最後にcout << flush;
とした方が、バッファのフラッシュを一度しか行わず、一般的に処理が
高速になります。
0869デフォルトの名無しさんNGNG
>>868 早速のお返事有難うございました。
しかし、cのFILEよりもc++のofstreamはかなり遅いですね。
test-cpp.cpp
#include <fstream>
int main( void ) {
std::ofstream fd( "hoge" );
for ( std::size_t i( 0 ); i < 10000000; ++i ) {
fd << "hoge\n";
}
return 0;
}

test-c.cpp
#include <stdio.h>
#include <stdlib.h>
int main( void ) {
FILE *fd( fopen( "hoge", "w" ) );
for ( unsigned int i( 0 ); i < 10000000; ++i ) {
fprintf(fd, "hoge\n" );
}
return 0;
}

をコンパイルして速度を比較してもFILE*の方が2倍近く速度が出ました…
0870デフォルトの名無しさんNGNG
まあ使い分けろってこった
0871デフォルトの名無しさんNGNG
>>869
STLportのファイル入出力はかなり速いぞ。
0872デフォルトの名無しさんNGNG
>>869
cygwin gcc 3.3.3 で /dev/null に対してテストしてみた。
c : cpp = 3 : 4
くらいだった。

2、3段関数呼び出しがはさまったていどじゃ、
こんなに差は出ないよな?
具体的なオーバーヘッドって、なんだろう。
0873デフォルトの名無しさんNGNG
拡張性、柔軟性を高めてるんだから、その分遅くなるのもしょうがない。

void load(FILE *fp);
こんな関数ではファイル、stdinくらいしか渡せないが

void load(istream &is);
この関数にはファイルもstdinも文字列ストリームも(自作すれば)TCPストリームでも、
istreamを継承したものならなんでも渡せる。


柔軟性なんかいらない、スピードだけが欲しい、というのならfopen使っとけ。
0874デフォルトの名無しさんNGNG
>>872
最適化してその結果?
つーか、gccだと単純なfprintf()はfputs()呼ぶからなぁ。
0875デフォルトの名無しさんNGNG
std::cout << "hoge\n";でもいっぺんデバッガで追ってみれば遅くて当然と納得できるだろ。
0876デフォルトの名無しさんNGNG
Metrowerks CodeWarrior for Windows v8.3
c:cpp = 6453:7297
0877デフォルトの名無しさんNGNG
参考までに、
minGW, VC7で iostream VS FILE* 試してみたけど
バイナリ入出力では誤差ぐらいしか違わんかった。
0878デフォルトの名無しさんNGNG
>>877
じゃあ、問題は iostream の方じゃなくて、string の側にあるってことか。
まあ、string は機能性重視のクラスだしね。
0879デフォルトの名無しさんNGNG
stringの実装は大きく違うからねぇ
VC6と7.xでも確か変わらなかったっけ?
短文用のバッファが導入されたとか
0880デフォルトの名無しさんNGNG
std::string って copy-on-write?
0881デフォルトの名無しさんNGNG
実装次第。VC++7.1付属のものはCOWじゃない。
0882デフォルトの名無しさんNGNG
VC6 に string::clear がなかったのには驚いた
おかげで全部 string::erase に書き換え…
0883デフォルトの名無しさんNGNG
VC6だったらstlport使うから無問題だろ
0884デフォルトの名無しさんNGNG
まあ、10年近く前のコンパイラだし。許したれ。
C++のISO標準もまだできてない頃だったと思うし。
0885デフォルトの名無しさんNGNG
ようするにC++じゃないってことだろ?
さっさと2003に乗り換えなさい
0886デフォルトの名無しさんNGNG
とりあえずコンパイラをVCTKのに。
0887デフォルトの名無しさんNGNG
fstream にてファイルのステータス等を調べるにはどうしたらよいでしょうか?

ちょっくら調べたのですが Cでいうところの fstatのようなのが見つからないです。
0888デフォルトの名無しさんNGNG
fstatって標準関数じゃないような…?
0889887NGNG
標準関数では
_stat
_stat64
_stati64
_wstat
_wstat64
_wstati64
_fstat
_fstat64
_fstati64
とかいっぱいあるのはわかっているのですが、あくまでもC標準関数なので・・

fstreamクラスのメソッドとしては実装されていないんでしょうか?

こんな感じで使えないのかな、と思いまして・・・

fstream testfile(c:\hoge.data);

stat_t file_info;

testfile.stat(&file_info);

0890887NGNG
>fstream testfile(c:\hoge.data); ×
fstream testfile("c:\hoge.data");

ないのであればfstatにしておきます〜
0891デフォルトの名無しさんNGNG
Cの標準関数じゃないって
0892887NGNG
え?そうなんですか?
よくわかってなくてすいません;;
0893デフォルトの名無しさんNGNG
Cの標準関数じゃないから、C++の標準関数にも入ってない
0894887NGNG
あ〜そういえばPOSIXでしたね・・・
0895デフォルトの名無しさんNGNG
「そういえば」って、おまえ・・・
0896デフォルトの名無しさんNGNG
久しぶりに痛い香具師を見たな。
0897デフォルトの名無しさんNGNG
>>889
標準関数かどうか確認できる資料くらい揃えとけ
http://www.jsa.or.jp

C++ は ISO/IEC14882 もしくは JIS X3014
C は ISO/IEC9899 もしくは JIS X3010
0898デフォルトの名無しさんNGNG
>>897
なんか有料になってるな
0899デフォルトの名無しさんNGNG
失敬閲覧可能なのはこっちか
http://www.jisc.go.jp/
0900デフォルトの名無しさんNGNG
<boost/regex.hpp>
をインクルードした状態で
fopen とか memset とか使うと
「オーバロード関数の呼び出しが解決できません」
と出るんだけど、回避策を知ってる人いませんか?
0901900NGNG
ごめん、自己解決しました
::fopen
とか書くと解決できるみたいです
なんかめんどいけど・・・
0902デフォルトの名無しさんNGNG
>>901
× ::fopen

#include <cstdio>
#include <cstring>

std::fopen
std::memset
0903デフォルトの名無しさんNGNG
ttp://jp.thespoke.net/MessageBoard/MessageBoard_ViewThread.aspx?postid=486

あの似顔絵ウィザードも含めて、HomeStyle+ って
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.NET Framework で書かれてるんですね。。。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
逆アセンブルしてみたら気づきました・・・・。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ああいうのを作品に組み込むのも面白いかも(笑)

MSの製品を逆汗するような奴をMSはMVPに選んでいるんです。MSは逆汗を認めていると
0904デフォルトの名無しさんNGNG
001.hに
#define TATE 10があって、
int intarray[TATE];のような形で利用してるんですが、

001.cppにも
#define TATE 10があってそれを使っているんですよ。

どちらか片方から 10 という定数を消す方法は無いですか?
ちょっと変えたいときに*.cppと*.h両方変えるのが面倒なんです。

VC++6とBCCを使用してます。
0905デフォルトの名無しさんNGNG
>>904
001.cppで001.hを#includeしちゃだめなのか?
0906904NGNG
>905
001.hを#includeすれば001.cppに書く必要は無いんですね。
目から鱗が垂直離陸。
0907904NGNG
途中で送信してしまいました。ありがとうございました。
0908デフォルトの名無しさんNGNG
垂直離陸いいなw
0909デフォルトの名無しさんNGNG
#ifndef TAKE
#define TAKE 10
〜〜〜〜〜
#endif

こんな方法もある
0910デフォルトの名無しさんNGNG
>>909
インクルードガードかよっ!
0911デフォルトの名無しさんNGNG
それを書くなら
#ifndef TATE
#define TATE 10
#endif
だな。
0912デフォルトの名無しさんNGNG
>>909
っつーか、そもそも ANSI C++ の規格上、同じマクロを二回定義しても問題ないぞ。
値が違う (#define TATE 10 と #define TATE 5 とか) のはダメだが。
0913デフォルトの名無しさんNGNG
#define TATE
だけでいいんじゃね?値なんてどうでも良いし。
0914デフォルトの名無しさんNGNG
ageちまった。スマソ
0915デフォルトの名無しさんNGNG
質問読めよ池沼
0916デフォルトの名無しさんNGNG
インクルガードじゃねーのか。スマソ
0917デフォルトの名無しさんNGNG
最近スレが閑散としてますね
0918デフォルトの名無しさんNGNG
下ネタかよ...orz
0919デフォルトの名無しさんNGNG
参照渡しって結局ポインタを渡すからコストはポインタ渡しと変わらないんでしょうか?
それともインライン展開のことを考えるとポインタたどらなくていい参照渡しの方がいいんでしょうか?
0920デフォルトの名無しさんNGNG
参照もポインタ辿るよ
0921デフォルトの名無しさんNGNG
¬¬
0922デフォルトの名無しさんNGNG
スレ違いで申し訳ないのだが、お尋ねしたいことがあります。
一番初めに学ぶべき言語はなんですか?(HTML除く)
0923デフォルトの名無しさんNGNG
>>922
もう来なくて結構ですから。
すれ違いですから。
いけませんから。
0924デフォルトの名無しさんNGNG
最初に学ぶべきなのは日本語。
次は英語。
0925デフォルトの名無しさんNGNG
>>922
ニホンゴワカリマスカ?
0926デフォルトの名無しさんNGNG
な、何だ!この青汁みたいな色のスレッドは!
0927デフォルトの名無しさんNGNG
>>922
俺はだまされないぞ。
お前は埋め厨だろう?そうだろう?そうだといえ!
0928デフォルトの名無しさんNGNG
ちょいと質問。
complexのようなtemplate classで、座標値をあらわすようなものはないだろか。
complexでも悪くないのだけれど、公開メンバx,yがあるようなのがいいなぁと。
いやまぁ、標準ならそれを使うし、boostならそれをパクるし、そうでないなら自作するのだけれど。
0929デフォルトの名無しさんNGNG
>>928
pair
0930デフォルトの名無しさんNGNG
>>929
first, secondをx, yの代わりに使うのか?
0931デフォルトの名無しさんNGNG
>>928
boost::tuples::tuple
0932デフォルトの名無しさんNGNG
>>930
そういう事になるな。3次元への拡張性はないけれど。
0933デフォルトの名無しさんNGNG
>>929-932
レス感謝。
tupleを持ち出すのもpairを使うのもI/Fがオーバスペックな気がするので
complexの実装見ながらもう少し考えてみる。
0934デフォルトの名無しさんNGNG
>>932
pair<x, pair<y,z> >
0935デフォルトの名無しさんNGNG
>>934
w
0936928=933NGNG
要求仕様見ながら実装してたらなんだかMFCのCPointのようになって来た悪寒。
あっちは整数だったと思ったけど。
0937デフォルトの名無しさんNGNG
class TestA{
public:
TestA() {
a = new int;
}
~TestA() {
delete a;
}
int *a;
};
class TestB : public TestA{
public:
TestB() {
b = new int;
}
TestB(const TestB& B) {
b = new int;
*b = *B.b;
}
~TestB() {
delete b;
}
int *b;
};
main() {
TestB a;
TestB b = a;
}

というプログラムで何故コピーコンストラクタでTestAクラスのメンバのaに別のアドレスを割り当てなくても大丈夫なのでしょうか?
C言語なら俺に聞け!スレでスレ違いと言われたのでこちらに来ました
0938デフォルトの名無しさんNGNG
大丈夫じゃないだろ
main()
{
TestB *a = new TestB();
a->a = 100;
TestB b = *a;
delete a;
cout << b.a << endl;
}
ってやってみ
0939デフォルトの名無しさんNGNG
>>937
TestB b = a;
ではTestAのデフォルトコンストラクタ->TestBのコピーコンストラクタと呼ばれるから
TestA::a自体は有効なアドレスを示してる。
アドレスが指してる先の値はコピーされてないけどな。
0940デフォルトの名無しさんNGNG
なるほど
ありがとうございました
0941デフォルトの名無しさんNGNG
デストラクタが必要なクラスは必ずコピーコンストラクタと代入演算子が必要
http://c2.com/cgi/wiki?RuleOfTheBigThree
0942デフォルトの名無しさん05/01/18 03:51:28
あるソフトのプラグイン用のDLLを作成しているのですが
いままでC言語(C++ではない)形式で作っていました。

複雑になってきたので、処理の一部をC++で書き換えたところ
うまく関数をエクスポートできなくなってしまいました。

インターフェイス部分のみCで、内部の処理をC++で書きたい場合は
どのようにすればいいのでしょう?
0943デフォルトの名無しさん05/01/18 06:10:22
extern "C"のことを聞いてるのか?
それともどういったかんじで関数を処理すればいいのかという話か?
0944デフォルトの名無しさん05/01/18 07:08:53
942です

いままでaaa.cですべてまかなっている状態だったのを
内部の処理のほとんどの部分を新規にbbb.cppに作り直して
aaa.cとbbb.cppの二つのファイルにし
エクスポートする関数はいままでと同じ書式のままaaa.cに残したいのですが
aaa.cからbbb.cppのクラスを呼ぶことができません
C言語とC++との混在している状態でコンパイルするのは不可能ですか?
0945デフォルトの名無しさん05/01/18 08:23:31
>>944
そりゃ、aaa.c はC言語だから、クラスは使えないね。
そんなときは extern "C" 使ってくっつける。

// bbb.h
#if !defined(__cpluplus)
extern "C" {
#endif

int bbb_xxxx( int a , int b );

#if !defined(__cpluplus)
}// extern "C"
#endif

// bbb.cpp
#include "bbb.h"
class bbb {...};
int xxxx( int a , int b )
{
 bbb b( a );
 return b.xxx( b );
}

// aaa.c
#include "bbb.h"
0946デフォルトの名無しさん05/01/18 20:22:19
942です
externで検索していろいろ調べてみました

CとC++ではリンゲージというものが違うようですね
extern "C"を指定してエクスポートすることで
あえてaaa.cのほうは使う必要がなくなったので
bbb.cppのほうからextern "C"にてエクスポートすることにしました。

大変参考になりました。ありがとうございます
0947デフォルトの名無しさん05/01/19 00:05:44
ビャーン先生がD&Eの前書きでこてこてなjava批判してたねぇ
0948デフォルトの名無しさん05/01/21 00:25:19
まだ読んでないんだけどどんな批判なの?
0949デフォルトの名無しさん05/01/21 00:30:28
ツルピカ
0950デフォルトの名無しさん05/01/22 17:03:44
C++にもスレッド入らないかな?
0951デフォルトの名無しさん05/01/22 17:38:26
もしかしてタスクスケジューラを C++ で書いてる例か?
0952デフォルトの名無しさん05/01/22 18:08:48
class BASE{
public:
  virtual void out(int n = 0){ 〜; }
  virtual void out(void){ 〜; }
};

class A1 : public BASE{
public:
  void out(void){ 〜; }
};

int main()
{
  A1 a;
  a.out();
  a.out(2);  // ←コンパイルエラー

  return 0;
}


これってなんでコンパイル通んないんでしょう?
MSVC .NET使ってます。
0953デフォルトの名無しさん05/01/22 18:13:29
>>952
通らない。
http://www.fides.dti.ne.jp/%7Eoka-t/cpplab-hide-overload.html

あと、引数のない関数を定義するのに void って書くの気持ち悪いからやめれ。
あと、デフォルト引数とオーバーロードを一緒に使うのやめれ。
0954デフォルトの名無しさん05/01/22 18:14:27
out(void)がBASE::(int)を隠しているから
隠すなら private に明示的に using する
隠したくないなら public に using する
はっきり汁!
0955デフォルトの名無しさん05/01/22 18:18:42
>>952
名前解決の順序が、引数型によらず

1. まず最も内側のスコープ内 (この場合だと A クラス内部) で探す
2. 見つからなかったら、一つ外のスコープ (この場合だと BASE) で探す

でリストアップしてきて、その中から引数型が合うものを選択するため。
そうなってる理由はともかく a.out(2) で BASE::out(int)を呼び出したければ
class A1 の定義中で using BASE::out; しとけば OK。

あと BASE::out() は BASE::out(int n = 0) と BASE::out(void) どちらを呼んで
欲しいのか意図が謎。なおした方が良いと思うぞ。
0956デフォルトの名無しさん05/01/22 18:27:19
>あと、引数のない関数を定義するのに void って書くの気持ち悪いからやめれ。
エー
095795205/01/22 18:36:27
>>953-955
ほんとありがとうございます。よーく分かりました。

>デフォ引数
色々実験してる内に付けてしまったもので、投稿前に消し忘れてました。スマソ
あいまいになる!って突っ込まれるなあと思ってました。。。
何はともあれ、明快な解答ありがとうございました!
0958デフォルトの名無しさん05/01/22 18:52:39
>>956
エー、じゃない。おまいはCプログラマか。
0959デフォルトの名無しさん05/01/22 19:07:38
extern "C" のときは書いてる >(void)
0960デフォルトの名無しさん05/01/22 20:28:54
>>950
そんなあなたにboost::thread
0961デフォルトの名無しさん05/01/22 20:33:36
>>960
使ってるけど全然だめぽ
おとなしく言語仕様に取り入れてほしい

でも時期標準のリストにはスレッドのスの字も無かったっけ…orz
0962デフォルトの名無しさん05/01/22 20:36:29
極力機種依存を避けてる以上無理だろねぇ
0963デフォルトの名無しさん05/01/22 21:02:10
実装レベルをいくつかに分けるとか、
モジュールに分けたりとかして、
実装がサポートする範囲を選べるようにできないかなぁ……

やっぱ無理かなぁ……
0964デフォルトの名無しさん05/01/22 21:07:43
せめて synchronized, wait, notify, notifyAll, join だけでもサポートして欲しい
0965デフォルトの名無しさん05/01/22 21:09:52
おとなしくjava使えよハゲの下僕ども
0966デフォルトの名無しさん05/01/22 21:13:41
>>961
何がダメなん?
0967デフォルトの名無しさん05/01/22 22:12:58
>>961
無理だろうな。D&E でも Bjarne が「並列処理を必要とするアプリケーションは
多いが、そのための唯一の支配的な方式はない」と断言してる。

C++ の用途は数値計算からオフィススイート、データベースエンジン、OS、
ゲームまで幅広い。特定のプログラミングスタイルや、目的に特化した機能は
現状の C++ の利点を殺すことになるから、まず入らん。
0968デフォルトの名無しさん05/01/22 23:04:09
>>963
実装レベルを分けるってのはいいね。
EC++の逆ね。やって欲しいな。
0969デフォルトの名無しさん05/01/23 00:33:47
質問なんですけど、

class MyString {
string *pstr;
public:
MyString(const MyString ©) {
pstr = new string;
*pstr = *copy.pstr; // ←この部分
}
string *GetString() const { return pstr; }
}

*pstr = *copy.pstr;
この記述はなんでコンパイルエラーにならないんですか?
*pstr = *copy.GetString();
じゃなきゃだめだと思うんですが。
ちなみにコンパイラは BCC5.5 です。
0970デフォルトの名無しさん05/01/23 00:37:14
>>969
クラスの定義内では自分自身と同じ型の変数はprivateでも丸見えだよ。
0971デフォルトの名無しさん05/01/23 00:40:15
C++的にOKだからココンパイルエラーにならないんだよ坊や
0972デフォルトの名無しさん05/01/23 00:50:09
落ち着け坊や
097396905/01/23 00:54:17
( ・∀・)つ〃∩ ヘェー
どうもありがとうございました
0974デフォルトの名無しさん05/01/23 00:54:36
privateの仕様:
「メンバへのアクセスが制限され、
そのクラスのメンバ関数とフレンド以外はアクセスできなくなる。」


【クラス】とは書かれているが、【インスタンス】とは書かれていない。
詐欺的表現にも見えるが、所詮、騙される方が悪い。
0975デフォルトの名無しさん05/01/23 01:00:06
なぜ C++ は以下のように浮動乗数点数の定数を定義できない仕様にしたのでしょうか?
struct X {
static const int i = 100; // OK
static const float pi = 3.1416f; // error
};
0976デフォルトの名無しさん05/01/23 01:02:44
むしろprotectedのときに引っかかるんだな。
基底クラスのprotectedメンバに触れるのは
自分自身と同じ型を参照しているときだけってのに
気が付かないで基底グラス型を参照しながら、
「protectedメンバに触れねぇぞ、なんじゃこらぁ!」
0977デフォルトの名無しさん05/01/23 01:13:02
>>975
質問がおかしい。static constな整数型のみクラスボディで初期化可能なのであって、
それ以外の静的データメンバはクラスボディの外側で初期化しなければならない。

だからstatic const intが特別な例外なのだ。
0978デフォルトの名無しさん05/01/23 01:17:50
>>975
「なぜ Bjarne は」もしくは「なぜ WG21 は」じゃないか?
0979デフォルトの名無しさん05/01/23 01:26:15
昔はFPUがなかったりして浮動小数点の処理がいちいち関数だったりしたからじゃないか?
0980デフォルトの名無しさん05/01/23 01:32:49
不動小数点数がコンパイル時定数である必要性が無いからかな

struct X {
static const int i = 100; // OK
static const float pi;
};

const float X::pi = 3.14f; //OK

これでいいだろ。:
0981デフォルトの名無しさん05/01/23 02:11:05
>>980
ヘッダで定義できないのは嫌じゃないか?
0982デフォルトの名無しさん05/01/23 02:19:20
ヘッダとでバラバラに書くのが鬱陶しいよな
C++ FAQ ではヘッダに書けるもんはヘッダに書けばいいって書いてたけど
0983デフォルトの名無しさん05/01/23 02:59:33
float pi() {return 3.1416f;}
0984デフォルトの名無しさん05/01/23 03:02:24
>>981
定数を返す関数を淫乱にすればいい
0985デフォルトの名無しさん05/01/23 03:02:33
数値を見てそれと分かるんだから
#define PI 3.1415f
0986デフォルトの名無しさん05/01/23 03:06:54
>>985
float 限定やだ
それがたとえ long double 限定でも同じこと
0987sage05/01/23 03:39:32
Task.hで
class Task{
...
}

Task.cppで定義する
んでもって
Enemy.hで
#include "Task.h"
  class Enemy:public Task{←ここでエラー
...
}

"型名が必要" とエラーになってしまします。
どういうことでしょうか?ご助力お願いします。
BccとBccdev使ってます。
0988デフォルトの名無しさん05/01/23 03:43:36
>>987
class Task {
...
}; ←このセミコロンを忘れているというオチじゃないよね?
0989デフォルトの名無しさん05/01/23 03:44:17
そろそろ次スレの季節なの?
099098705/01/23 03:53:40
すいません、大丈夫です・・・
書くの忘れてました
0991デフォルトの名無しさん05/01/23 04:20:57
>>990
俺の所ではエラーでないぞ。ソース全部晒してみろ。
0992デフォルトの名無しさん05/01/23 05:05:18
次スレのタイトルはスレが乱立しないように
C++相談室(STL含む) part39
でよろしく
0993デフォルトの名無しさん05/01/23 10:07:20
>>975
enumとの互換性を保つ為に、クラスボディで整数型のみ初期化可能にした
0994デフォルトの名無しさん05/01/23 10:33:05
C++相談室(STL,template含む) part39
0995デフォルトの名無しさん05/01/23 10:40:25
STLつかうと一気に実行ファイルサイズが10倍に?!
0996デフォルトの名無しさん05/01/23 10:44:32
>>992
STL含むって言うけどさ>>1に
「テンプレートライブラリ(STL含む)に関する質問は専用の別スレにお願いッス。」
って書いてあるのはどうする?

templateスレの次スレのスレタイにSTLを入れてもらう方がいいんじゃないか?
0997デフォルトの名無しさん05/01/23 11:05:55
そのうち関数スレとかクラススレとか・・・・ もうアフォかとヴァカかと
0998デフォルトの名無しさん05/01/23 13:17:23
>>997
はぁ?お前が馬鹿でアホだろ。C++より長いCでもそんなスレできてねーだろタコ。




と煽ったからって自分で糞すれ立てたりするなよ。馬鹿は困るねぇ。
0999デフォルトの名無しさん05/01/23 13:18:34
999
1000デフォルトの名無しさん05/01/23 13:19:12
rubyyyyyyyyyyyyyyyyyyyy!!!!!!!!!!!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。