C/C++のトラブル集
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[メモ]]
メモに全部突っ込んで書いていたら,まさかの「サイズがデカ...
しょうがないので,C/C++系のトラブルだけこっちに移すことに...
#contents
*argcとargv [#v7a9a87c]
int main(int argc, char **argv)
-が一般的な宣言
-''arg''uments ''c''ount(argc), ''arg''uments ''v''alue(a...
*sizeof [#o204777d]
-sizeof()の返り値
|OS|>|>|>|~Windows XP|>|>|>|~FreeBSD|
|コンパイラ|VS 2008|VS 2005|.NET 2003|VS6|gcc(C)|gcc(C++)...
|char|>|>|>|>|>|>|>|1|
|unsigned char|>|>|>|>|>|>|>|1|
|short|>|>|>|>|>|>|>|2|
|int|>|>|>|>|>|>|>|4|
|long int|>|>|>|>|>|>|>|4|
|float|>|>|>|>|>|>|>|4|
|double|>|>|>|>|>|>|>|8|
*ダイアログをMFCダイアログから呼び出すと反応が異様に遅い...
-C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3...
-を読み出そうとして遅くなってるっぽ.
-何故,読み出すようになったのか・・・それだけが分からない...
[[:未解決]]
*CTimeを使わずに時間を取得する [#r3754c09]
-time.hを使う
struct tm *timeinfo;
time_t timer;
timer = time(NULL);
timeinfo = localtime(&timer);
strftime(buffer, length, "%m%d-%H%M%S", timeinfo);
-もっと短い時間(ミリ秒とか)を取得する場合は[[GetTickCount...
*floatとdoubleの違いについて [#l55831b8]
-[[float vs. double>http://homepage1.nifty.com/herumi/pro...
*C++のprivateなポインタ変数をreturnで外に出す [#g9842975]
-クラスでprivateで宣言したポインタ変数を,return でクラス...
#geshi(c++,number){{
#include <stdlib.h>
#include <stdio.h>
class Hoge{
public:
Hoge(){memory = new int;};
~Hoge(){delete memory;};
private:
int* memory;
public:
int* a(void){return memory;}
};
int main(int argc, char **argv){
Hoge *a = new Hoge();
int* b;
b = a->a(); //←ここで問題なくポインタを取得できる
*b = 5; //←ここで変更できてしまう
return 0;
}
}}
-private変数をreturnする段階でアウトなんじゃね?と思うん...
-ポインタが指す番地の中身は変更できるが、ポインタが指す番...
*enumの定義方法 [#ve588d6d]
-いっつも忘れるので自分用のmemo
enum 型 {値1, 値2, ... 値N };
-Example
enum the_sin {PRIDE, GLUTTONY, GREED, SLOTH, WRATH, ENVY...
*実行時にMSVCR80.DLL (MSVCR80D.DLL?) が無いと言われる [#g...
-OpenCVのデバッグ用ライブラリとリンクした後,実行時に言わ...
-以下の2点を修正
--highguid.libを外した
--highguid.libをビルドしなおし
-あとcxcored.libをリンクすると,heapがどうの,と文句を言...
ジャンル[[:OpenCV]][[:未解決]]
*fatal error C1010: プリコンパイル済みヘッダーの検索中に...
-プリコンパイル済みヘッダが定義されてるプロジェクトに自身...
-MFCのダイアログベースのプロジェクトの場合,''stdafx.h''...
-cppファイル側で,ヘッダファイルをincludeする前に
#include "stdafx.h"
#include "xxxx.h"
-としてやればエラーは回避できる
-プロジェクトのプロパティで「''プリコンパイル済みヘッダを...
ジャンル[[:Visual Studio]]
*fatal error C1020: 予期しない #endif です。 [#med01e84]
-"stdafx.h"をインクルードすると,それ以前のプリプロセッサ...
-よって,下記のようにWindowsの場合はインクルードして,そ...
#ifdef _WIN32
#include "stdafx.h"
#endif
-この場合はstdafx.hへのincludeは諦め,「''プリコンパイル...
ジャンル[[:Visual Studio]]
*fatal error C1033: [#tdd35f4e]
-おそらくテンポラリなエラー
-Visual Studioでこれが起きる場合,IntelliSenseの更新とか...
ジャンル[[:Visual Studio]]
*error C2062: 型 'char' は不要です。 [#xc0bd5af]
-smallと言う変数名は予約語
-RpcNdr.hを(どういう経緯でincludeしたかは知らないが)inclu...
#define small char
-とされている.
-と言うわけで,変数名smallを使用するとcharを宣言したこと...
-レアなエラーかも.
ジャンル[[:Visual Studio]]
*error C2064: 引数を取り込む関数には評価されません。 [#gf...
-変数と関数で同じ名前を使用すると発生する
-変数が優先されるらしい.
time_t time;
time = time(NULL); //関数のtimeが正しく取り扱われない
ジャンル[[:Visual Studio]]
*error C2059: 構文エラー : サフィックスが無効です。 [#g5e...
-変数名の最初に数字を用いるとエラーになる.
#geshi(c++){{
int 3DPoints[200]; // <- 変数名の頭に数字は使えない
}}
ジャンル[[:Visual Studio]]
*error C2065: 'M_PI' : 定義されていない識別子です。 [#p09...
-M_PIはmath.hで定義されてる円周率
-しかし,math.hをincludeしただけではdefineされない
-_USE_MATH_DEFINESをdefineする必要がある
-ちなみにVC++6では定義されてないとのうわさ.
#geshi(c++){{
#define _USE_MATH_DEFINES // <-これが一番大事♪
#include <math.h>
int main(){
printf("%f\n", M_PI);
}
}}
ジャンル[[:Visual Studio]]
*error C2381: 'exit' : 再定義 ; __declspec(noreturn) が異...
-[[OpenGLとOpenCVの共存>OpenGLとOpenCVの共存#o909b031]]参照
*error C2679: 二項演算子 '<<' : 型 'const largeNumber' の...
-error C2679: binary '<<' : no operator found which takes...
-cppunitを使ってテストをビルドしようとしたら、このエラー...
-下記、assertionを使うと、OStringStreamに << 演算子で出力...
#geshi(c++,number=on,start=38){{
template <class T>
struct assertion_traits
{
static bool equal( const T& x, const T& y )
{
return x == y;
}
static std::string toString( const T& x )
{
OStringStream ost;
ost << x; // error
return ost.str();
}
};
}}
-このOStreingStreamはstd::ostringstream として、Stream.h...
-なので、この operator << を定義する必要がある
-headerファイル
std::ostream& operator << (std::ostream& out, const clas...
-cppファイル
std::ostream& operator << (std::ostream& out, const clas...
{
out << right.getString(); // 適当な処理を行う
return out;
}
-[[後述>#uee91c54]]するように、ヘッダファイルと実装を切り...
*error C3861: 'min'識別子が見つかりませんでした [#ua5dc299]
-'max'も同じく
-Visual Studio 2005からVisual Studio 2008に変更したら起きた
-どうやら,min,maxは非標準のマクロだったらしい.
-std::min, std::maxでリプレースするのが妥当かと.
std::max(a, b)
-しかし,それでもダメなときがある.
error C2780: 'const _Ty &std::max(const _Ty &,const _Ty ...
-引数にテンプレート関数を使ってる関係で,どうやら,引数の...
-両方の引数の型が違うとこける模様.
double d = 1.0;
int i = 0;
std::max(i, d); // ←ここでdoubleとintの比較なのでこける
-ってな具合に.
-静的キャストを使って回避しよう
std::max(1.0, (double)0);
*error D8016 : コマンド ライン オプション '/GL' と '/ZI' ...
-[[C/C++のトラブル集#Visual Studio .NETでプロファイラを使...
ジャンル[[:Visual Studio]]
*warning C4390: プロトタイプされている関数が呼び出されま...
-クラスのコンストラクタが引数が無いのに、空っぽのカッコ付...
class CHogehoge{
public:
CHogehoge() {};
};
main(){
CHogehoge temp(); // ←こいつが警告を引き起こす
//CHogehoge temp; // 正しくは、カッコ無しで宣言する
}
-参考:[[コンパイラの警告 (レベル 1) C4930>http://msdn.mic...
*warning C4819:ファイルは、現在のコード ページ (932) で表...
-OpenCVをVisual Studio 2005で利用するとこのwarningが出る.
-cv/cvcompat.h が原因.
-Visual Studio 2005でcv/compat.hを編集(一文字入力してから...
-参考:[[Visual C++ 2008 Express Edition - OpenCV@Chihara...
ジャンル[[:OpenCV]][[:OpenCV 1.1]][[:OpenCV 2.0]][[:OpenC...
-Visual Studio 2008 + OpenCV 2.2 ではlegacy/compat.hpp が...
-上記方法では何故かwarningが消えない.
-原因は追求中.
-対症療法と根本的な解決方法を1つずつ
- #pragma を使って warning を 抑制
#geshi(c++,number){{
#pragma warning(disable : 4819)
#include <cv.h>
#pragma warning(default: 4819)
}}
--上記のようにwarningを吐き出すファイルの直前と直後をprag...
--参考:[[【VC++】OpenCVのヘッダが C4819ワーニングを出し...
- 正しいファイルをインクルードする
--OpenCV 2.2 でファイル構造が大幅に変わった.
--C++インタフェース用のファイルとCインタフェース用のファ...
--旧来の cv.h や cxcore.h のincludeも compatibility とし...
--それらをincludeすると,上記C4819 warningが発生する.
--対応するヘッダファイルを opnecv2 以下から探してくれば良い
---cxcore.h <-> opencv2/core/core_c.h (Cインタフェース) o...
---cv.h <-> opencv2/imgproc/imgproc_c.h (Cインタフェース)...
---highgui.h <-> opencv2/highgui/highgui_c.h (Cインタフェ...
---など(あくまでも一例)
-いずれにしろwarningなだけなんだが.
ジャンル[[:OpenCV]][[:OpenCV 2.2]][[:Visual Studio]]
*warning C4800: 'int' : ブール値を 'true' または 'false' ...
-原因:intをboolにキャストしている
#geshi(C++,number){{
bool function(int number){
return (bool)number; // warning C4800
}
}}
-int型の変数が0だったらfalse,それ以外の場合はtrueとする...
-しかし,intをboolにキャストしてはいけない(厳密には非bool...
-対処
-キャストするときに ''!= 0'' を使うのが一番簡単
#geshi(C++,number){{
bool function(int number){
return number != 0;
}
}}
-cf:[[コンパイラの警告 (レベル 3) C4800 (C++)>http://msdn...
*warning LNK4098: defaultlib '*****' は他のライブラリの使...
-プロジェクト->リンカ->コマンドライン->追加のオプションに...
-参照:[[http://d.hatena.ne.jp/kasei_san/20080109/p1]]
ジャンル[[:Visual Studio]]
*warning MSB8012: TargetPath does not match the Library's...
-古いVSのプロジェクトを新しいVSでビルドする発生する
-リンクするライブラリ名などを、$(TargetName) などのマクロ...
-自前で$(TargetName)などと書き換える必要があるっぽい
-参考:[[How do I fix warning MSB8012 in a static library ...
*0xc0150002 アプリケーションを正しく初期化できませんでし...
-OpenCV 1.1pre1にした途端,このエラーが出る人いるみたい
-[[Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x8...
--http://d.hatena.ne.jp/piy/20081130/1228020473
--http://d.hatena.ne.jp/cvcvcv/20081127/1227780876
--http://naruhodo.nazo.cc/modules/plzXoo/index.php?action...
--あたりを参考にした
-ミソは,VS .NET 2005 SP1+Redistribution Packageが必要
ジャンル[[:OpenCV]][[:OpenCV 1.1]][[:Visual Studio]]
*OpenCV 1.1でプロセス(プログラム)が終了しなくなる [#n127d...
-以下あたりを参照
--[[Yusuke Sugano/ Blog » OpenCV 1.1pre1>http://ww...
--[[OpenCV1.1のcvLoadimage|hidelab>http://ameblo.jp/hide...
-SHBrowseForFolder APIとOpenCV 1.1 pre1を使うとプロセスが...
-聞いただけで,使ったこと無いので原因はつかめてない.
-'Invalid allocation size'とか出るみたい
ジャンル[[:OpenCV]][[:OpenCV 1.1]][[:Visual Studio]][[:未...
*関数を使用しただけで,突然大量の「型が定義されていません...
-KLTの実装にて起きた.
-原因というより,C言語で起きてたので,仕様とも言うべき事...
-KLTの本体はC言語で書かれている割に,メインプログラムはC+...
-よって,メインプログラム内の適当な場所で関数をコールする...
-初歩的な・・・
ジャンル[[:Visual Studio]]
*Debug Assertion Failed! Expression: _pFirstBlock == pHea...
-概要
--DLL内で確保されたメモリを、DLL外で解放すると、"Debug As...
-発生条件
--[[参考サイト>https://stackoverflow.com/questions/188827...
--Visual Studio の設定でRuntime Library の設定を"Multi-th...
--全部で/MDd、/MD、/MTd、/MTと4パターンあるが、/MTdの場合...
--DLL内部で確保したメモリ配列をDLLの外部で解放する
--そのときに、Debug Assertion Failedが発生する
-手元の環境
--gtestを使ってテストプログラムを書いていたときに遭遇
--gtestを使うためには、"Multi-threaded Debug (/MTd)"もし...
--さもないと、こんなエラーに遭遇する
error LNK2038: mismatch detected for 'RuntimeLibrary': ...
--で、Releaseではheapの状況とか確認しないので、見た目はエ...
--以下のようなプログラムで発生した (一部省略)
#geshi(c++){{
void function()
{
std::vector<cv::Point> imagePointsUndistorted; ...
cv::undistortPoints(imagePoints, imagePointsUndistort...
} ...
}}
--Multi-ThreadedかMulti-Threaded DLLかは、ランタイムライ...
--しかし、このためには、実行するコンピュータにランタイム...
--/MTもしくは/MTdの選択にすると、利用するランタイムライブ...
--プログラムサイズが増大するので、一長一短。
--最後の小文字のdは、Debug版を意味し、メモリの配列外アク...
--このランタイムライブラリで管理される部分がまさにstd::ve...
-解決方法
--std::vectorをDLLにわたす前に確保しておく。
#geshi(c++){{
void function()
{
std::vector<cv::Point> arrayPoints;
arrayPoints.reserve(1000); // 予め...
cv::undistortPoints(imagePoints, arrayPoints);// 予め...
} // これ...
}}
--ただし、この場合は事前に配列のサイズがわかっている必要...
--わからない場合は、余裕を持って多めに確保しておけば良い。
--なお、OpenCVを使っていたときにエラーに遭遇したが、本質...
*Visual Studio .NETでプロファイラを使う方法 [#da453f4d]
-Professional Edition のみ?
-VC++の場合(多分ほかも同じだと思うけれど)
+ビルド(B)→ガイド付き最適化のプロファイル(P)→インストルメ...
--リビルドが行われる
--Debugモードだとerror D8016が出たので無理かも
+ビルド(B)→ガイド付き最適化のプロファイル(P)→インストルメ...
--アプリケーションが起動するので,適当に動かす(最適化させ...
--アプリケーションを終了する
+ビルド(B)→ガイド付き最適化のプロファイル(P)→最適化(O)
--実行した情報がカウントして統計される
+ツール(T)→Visual Studio 2005 Command Promptを実行
+コマンドプロンプト上でコマンドを実行
C:\Program ... \VC\bin>pgomgr /summary XXXXXX\apli.pgd
--XXXXXXにはアプリのReleaseフォルダへのパス
--apliはソリューションの名前
+これでこんな表示が出るはず.長いのでリダイレクト推奨
Microsoft(R) Profile Guided Optimization Manager 8.00.50...
Copyright (C) Microsoft Corporation. All rights reserved.
PGD ファイル: \XXXXXXXX\apli.pgd 11/20/2008 12:54:52
モジュールの数: 1 関数の数: 389 Arc の数: 1248 値の数...
静的命令: 11054 基本ブロック: 1743 平均 BB サイズ: 6.3
動的命令: 327756730
entry static ...
関数名 count instr ...
tSubtractAverage 307200 93 1...
shift 1603470 90 ...
C2TSI::getInnerProductMap 240 181 ...
tLowPass 153600 322 ...
tPadZero 307200 122 ...
CTSI::SearchStartAndEnd 960 118 ...
CTSI::extractRawColumn 307200 29 ...
CTSI::getNormMap 480 58 ...
CTSI::getTimeSpaceImage 1442 357 ...
_cvGetRow 40560 9 ...
CTSI::loadImageFromImageFile 20164 23 ...
CTSI::loadImageFromImageFile 20164 11 ...
--右から3列目のdynamic instrが実行回数
--右から2列目の%totalがその関数が実行に要した時間
--一番右のrun totalが実行時間の累計和
+次回ビルドするときに何か言われることがあるが,プロファイ...
ジャンル[[:Visual Studio]]
*FILE*構造体 [#p34ae5f5]
**int fseek(FILE *fp, long offset, int whence); [#edbb9329]
-whenceからoffsetバイト分移動したところに移動する
-whenceは,
--ファイルの先頭を表すSEEK_SET
--現在位置であるSEEK_CUR
--終端位置であるSEEK_END
-のどれか
**void rewind(FILE *fp); [#y5e9870c]
**FILE* fopen(const char *filename, const char *mode); [#...
-filenameとmodeの順番に注意!!
*コード要素''***''が読み取り専用であるため、追加と削除操...
-Visual Studio 2005で発生
-MFCダイアログボックスにボタンを追加し,イベントハンラを...
-原因はncbファイルの破損っぽい.
-http://blogs.yahoo.co.jp/dpdtp652/837997.html 参照
-ncbファイルはちなみにintellisenseの情報を保存したファイ...
-ソリューションを1度閉じた後,ソリューションと同じフォル...
-再びソリューションを開くと問題が解決している
ジャンル[[:Visual Studio]]
*コード要素''***''が読み取り専用であるため、追加と削除操...
-Visual Studio 2010で発生
-MFCダイアログボックスにボタンを追加し,イベントハンラを...
-原因はインテリセンスの保存されているsdfファイルの模様
-ソリューションを1度閉じた後,ソリューションと同じフォル...
-再びソリューションを開くと問題が解決している
-また、だいたいのクラスウィザードのエラーはこれ
ジャンル[[:Visual Studio]]
*プロジェクトにクラスの追加を行うとVisutal Studioがフリー...
-メニューからクラスの追加操作を行うだけでVisual Studioが...
-原因は[[コード要素が読み取り専用..>C/C++のトラブル集#m57...
-ncbファイルを削除すること
ジャンル[[:Visual Studio]]
*CRとLF [#ya5e367e]
-CRが\rであり,Mac OS(9まで)などで使われていた改行コード
-LFが\nであり,Unix系のOSなどで使われている改行コード
-WindowsではCR+LFであり,\r\nで表される
*コンソール画面が消えない [#p918f671]
-%%OpenCV 2.1 にバージョンアップしてから,ときたま実行し...
-%%OpenCV 2.1 + Visual Studio 2003 でコンソールアプリを作...
-%%実行して,正常終了→Visual Studioの画面が実行モードから...
-%%が,それでもコンソール画面が出たまま%%
-%%少ない事例だが,今のところOpenCVで生成したウィンドウは...
-%%Visual Studioを終了させてもダメ%%
-%%再起動させようにも,残ったコンソール画面が悪さをして再...
-%%OpenCV 2.1でウィンドウを生成して,ウィンドウを破棄(cvD...
-どうやら,Visual Studio 固有の問題らしく,Hotfixが公開さ...
-[[You cannot close a console window of an application af...
ジャンル[[:Visual Studio]]
*Visual Studio でコマンドラインアプリをデバッグする際,引...
-コマンドラインアプリで,引数により挙動を変えるプログラム...
-ただし,デバッグモードでは,引数なしの状態でしか実行され...
-プロジェクト(P)→プロジェクトのプロパティ(P)→デバッグ→コ...
-Visual Studio 2008 と 2003で最低限確認した.
-ウィンドウのレイアウトは違うかも
-添付はVisual Studio 2008の画面
http://tessy.org/wiki/index.php?plugin=attach&pcmd=open&r...
-参考:[[応用機械情報工学 2006@八戸工業大学機械情報技術学...
ジャンル[[:Visual Studio]]
*OpenCV のリポジトリにアクセスしようとしたらユーザ名とパ...
-本来はOpenCVのリポジトリにuserもpasswordも要らない
-最近¬e{when?:詳しくはいつだか覚えてないけれど};OpenCV...
--更にその昔は CVS でバージョン管理してた時代にはユーザ名...
-ちなみにリポジトリ間では互換性(?)が無いので,もう1度 ...
-そして2012年7月26日に[[OpenCVのリポジトリもSVNからgitに...
-参考:[[OpenCV Computer Vision Library ()>http://comments...
*ビットリバースとポップカウント [#z5e59158]
-bit表記した変数(例えば16bitのshort)の中に1がいくつ存在す...
-bit表記した変数(例えば16bitのshort)のbitの並びを前後逆に...
-例
|10進数|16進数|2進数|ビットリバース|ポップカウント|
|1|0x01|00000001|10000000|1|
|2|0x02|00000010|01000000|1|
|3|0x03|00000011|11000000|2|
|182|0xB6|10110110|01101101|5|
|88|0x58|01011000|00011010|3|
-ルックアップテーブルを使うと結構速い。¬e{bit-reversal...
-ビット単位で数える/並べ替えると著しく遅い¬e{popcount-...
-また、マスキングを使った分割統治法もある¬e{bit-revers...
*プリプロセッサ [#wc37cd85]
-#ifdefなんかはよく使う
#define
#if defined()
#if !defined()
-cppコマンドというのを使うと、プリプロセッサ後のファイル...
-C言語のプリプロセッサの定義に関して解説
-[[C言語のプリプロセスのメモ(Hishidama's C pre-process Me...
*C言語の文字コード変換について [#p839bf54]
-特に限定してないけれど、基本的にSJIS→UTF-8への変換ができ...
**::WideCharToMultiByte を使う方法 [#a4fffe34]
-WindowsのWIN32APIなので、広くWindowsで使うことができる。
-SJIS→UTF16→UTF8 の順で変換する。(逆も然り)
-参考:[[its55 lab » C++でShift-JISをUTF-8に変換する...
-参考:[[its55 lab » C++でUTF-8をShift-JISに変換する...
-参考:[[WideCharToMultiByte 関数 - msdn>http://msdn.micro...
-参考:[[MultiByteToWideChar 関数 - msdn>http://msdn.micro...
-参考:[[GetTextCharset 関数 - msdn>http://msdn.microsoft....
-参考:[[IsTextUnicode 関数 - msdn>http://msdn.microsoft.c...
-参考:[[文字コードの変換ライブラリ | プログラマーズ雑記帳...
**iconvを使う方法 [#p82d755e]
#geshi(C++,number=on){{
iconv_t ic = iconv_open("SJIS", "UTF-8");
memcpy( in, utf8, sizeof(utf8) );
iconv( ic, &in, &in_size, &out, &out_size );
iconv_close(ic);
}}
-当然ながらiconvがインストールされてなければならない
-参考:[[LinuxのC言語で Shift-JIS と UTF-8 の相互変換 - か...
-参考:[[文字コードの変換ライブラリ | プログラマーズ雑記帳...
**ICUを使う方法 [#pdd60d10]
-クロスプラットフォーム対応のICU
-参考:[[ICU Shift_JISとUTF-8の変換 - Faith and Brave - C+...
-参考:[[ICU - International Components for Unicode>http:/...
-参考:[[C/C++あれこれ/文字コード変換ライブラリICUのサン...
-参考:[[utf 8 - C++ UTF-8 output with ICU - Stack Overflo...
-参考:[[ICU による文字コード変換ライブラリ - yanoの日記>h...
*std::string内で使える文字列検索関数 [#nabef9c5]
-STLにあるstd::string内にある関数
find()・・・指定した文字列が、最初に現れる位置を返す
rfind()・・・指定した文字列が、最後に現れる位置を返す
find_first_of()・・・指定した文字列の一部の文字が、最初...
find_last_of()・・・指定した文字列の一部の文字が、最後に...
find_first_not_of()・・・指定した文字列の一部に含まれな...
find_last_not_of()・・・指定した文字列の一部に含まれない...
-引用元:[[C++編(標準ライブラリ) 第1章 string>http:/...
*vector でfindする方法 [#w49a4d24]
#geshi(c++,number=on){{
#include <algorithm>
#include <vector>
std::vector<int> datas;
int needle;
std::vector<int>::iterator it = std::find(datas.begin(), ...
if(it == datas.end()){
//見つからなかった場合
std::cout << "Not Found" << std::endl;
}
}}
* '>>' should be '> >' within a nested template argument ...
-Visual Studio では通ったが、gccでは通らなかった
#geshi(C++, number){{
std::vector<std::vector<std::string>> dataArrayNG // '>'...
std::vector<std::vector<std::string> > dataArrayOK // こ...
}}
* cannot appear in a constant-expression [#cdd1e974]
-gcc で const の宣言と代入を同時に行うと、エラーになる&no...
*sleep について [#e129bb07]
-clock 関数や gettickcount 関数などがある
-[[時間測定関数の性能(分解能と最大値)のまとめ>http://ww...
*iostream のフォーマット指定子 [#gaba9f2e]
-printfに慣れてしまったので、書式指定がどうもしっくりこな...
-ゼロ埋め
cout << setfill('0') << setw(5) << 20 << endl;
-16進数、10進数、8進数も使える¬e{cpp-corresponds-iostr...
cout << oct << 42;
cout << dec << 42;
cout << hex << 42;
*typedef の順序 [#d06c8897]
-いつも混乱する¬e{how-to-use-typedef:[[typedefの使い方...
typdef int MyType;
* << operator のオーバーロード [#uee91c54]
-<< operator をオーバーロードしたら、error LNK2005 リンク...
-宣言と実装をヘッダとCPPで分ける必要がある。
* getopt を使おう [#l88cfe5d]
-オレオレ実装でオプションを受け付けるのでなく、なるべくge...
-[[向川先生の解説サイトが分かりやすい>http://omilab.naist...
*すべてのプログラマが読むべき記事10選 [#d9d4a97a]
-[[すべてのプログラマが読むべき記事10選 | POSTD>http://po...
-[[10 Articles Every Programmer Must Read>http://javarevi...
-[[What Every Computer Scientist Should Know About Floati...
-[[What Every Programmer Should Know About Memory>http://...
*クラスのoperatorを定義するときの戻り値の型 [#xfb43dfe]
-実験した上でまとめてるサイト¬e{operator-definition:[[...
-代入演算
foo& foo::operator = (const foo&);
-四則演算
const foo foo::operator + (const foo&);
-四則演算と代入
foo& foo::operator += (const foo&);
-比較演算
bool foo::operator == (const foo&);
-などなど
-[[クラスの operator を定義するとき、戻り値の型はどうすべ...
-実験した上で考察されているので、自分が理解する手助けにな...
*string [#k04dafd7]
-文字を消すときはeraseでchar のindex単位で削除できる
std::string hoge = std::string("foo");
hoge.erase(0,1);
std::cout << hoge << std::endl;
-実行結果
oo
*Visual Studio でcppunitをビルドするお話 [#c3ec0623]
-[[cppunit>http://sourceforge.net/projects/cppunit/]]¬...
-付属しているサンプルはdsw(VS6)でビルドする用なので、Vi...
-[[Visual Studio C++でCppUnitをビルドできない、そんなとき...
-というか、VisualStudio2012あたりだと、自前でテスト機能が...
-[[cppunit をVisual Studio で使うためのチュートリアル。>h...
-cppunit自体が古いのかなぁ。
*Sleep関数 [#i579fb1e]
-標準関数ではないので、実装系により、適当なファイルをイン...
-Windows標準はWindows.hにある
-unix系だと、unistd.hにsleepがある
-[[What is the proper #include for the function 'sleep' i...
*複数桁数の数字を文字列に変換する [#r83345d9]
-std::to_string を使うと便利。
-string ヘッダにある。
-[[Alternative to itoa() for converting integer to string...
*ある型が定義されているか確認する方法 [#se34d38f]
-C/C++の仕組みでやるのは無理
-define されてるヘッダのインクルードガードで判別するのが...
-[[c++ - How to check if a datatype is "defined"...
*Cコンパイラとプラットフォームを判定する定義済みマクロ [#...
||gcc|msvc|
|64bit (IA64)|__ia64__|_M_IA64|
|64bit (x86_64)|__x86_64__|_M_X64|
|32bit (x86)| __i386__|_M_IX86|
-Cコンパイラのプラットフォーム、コンパイラを判別する定義...
-メジャーなarchitecture/compiler による pre defined macros
-Alpha, AMD64, Arm, Arm64, Blackfin, Convex, Epiphany, HP...
-こんなアーキテクチャあるんだ・・
-[[Pre-defined Compiler Macros / Wiki / Architectures>htt...
-[[Pre-defined Compiler Macros / Wiki / Compilers>https:/...
*ビット操作 [#p5494fba]
-ビット操作だけでかなりの数学的に処理を再現できる
-特にループが無くビット操作で再現出来ると、くっそ速い。
-参考:[[Bit Twiddling Hacks>http://graphics.stanford.edu/...
*streamクラスのeof [#cdb4b69d]
-streamクラスがC++の標準ライブラリで定義されている
-eofが返す値のタイミングをチェック
-[[【C/C++】 streamクラスのeofメンバ: 日々此精進>htt...
*Error: use of enum ‘AVCodecID’ without previous declarat...
-Ubuntu 12.04(32bit)に自前ビルドのffmpegをインストールし...
-Compile error using old ffmpeg with OpenCV
-ffmpegとOpenCVのバージョンが食い違うと発生する
-Old types and enums cause this error
-型やenumが食い違う
-ffmpegを最新にしたり、パッケージからインストールしたり、...
-cap_ffmpeg_impl.hpp内のenumを書き換える方法も示唆されて...
-参考:[[OpenCVふのフォーラムでの回答>http://answers.openc...
-参考:[[ffmpegをソースからビルドしてOpenCVをビルドする方...
-参考:[[OpenCV Lover: Install Opencv 2.3.1 on Ubuntu 12.0...
-参考:[[Debian上にffmpegをインストールする方法>http://sup...
*C++でvectorの参照渡しを省略可能にする方法 [#u71944f4]
-普通の引数はオプションにすることが可能
#geshi(c){{
void func(int a, int b = 0);
}}
-と宣言されていれば、
#geshi(c){{
func(1); // func(1, 0) と等価
func(1, 0); // 上記と同じ挙動
func(1, 1); // いずれもエラーにならない
}}
-という呼び方が可能
-ただ、引数にvector何かをオプションで渡したいときに悩む
#geshi(c){{
void func(int a, const std::vector<int>& b = std::vector<...
}}
-こうすれば、bのvectorはオプション扱い
-constを付けないと、gccだと叱られる
-参考:[[shnya_mさんはTwitterを使っています: "@uchumi...
-参考:[[gist:5048103>https://gist.github.com/anonymous/50...
* invalid initialization of non-const reference of type [...
-Visual Studio では発生しないが、gccで発生するエラー
-関数の実引数が一時変数の時は、constを付けないと、エラー...
-普通の変数と一時的な変数
--int a などは普通の変数
--a + 1 の結果もintだが、格納するまでは一時変数
-サンプルコード
#geshi(c++){{
inline myClass myClass::clone() const
{
myClass m;
return m;
}
void function1(myClass& before)
{
return;
}
void function2(const myClass& before)
{
return;
}
int main(int argc, char **argv)
{
myClass a = myClass();
function1(a);
function1(a.clone()); // this causes error 'invalid i...
function2(a);
function2(a.clone());
return 0;
}
}}
--前述のサンプルコードのうち、2つ目のcall だけがgccでエラ...
--Visual Studio では発生しない¬e{vs-version:Visual Stu...
-参考:[[最近のはまりポイント - 三次元日誌>http://d.hatena...
-参考:[[リリカル☆Lisp開発日記 » Blog Archive &ra...
* how to create a directory using c++ + WINAPI [#r011204d]
- use CreateDirectory API from WINAPI
#geshi(c++){{
void dumpdata(std::string dirname, std::vector<double> da...
{
CreateDirectory(dirname.c_str(), NULL);
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
std::cerr << "directory " << dirname << " already...
}
}
}}
-[[c++ - Create a directory if it doesn't exist - Sta...
-[[c++ - How to find out if a folder exists and how to cr...
-if you need non-windows API, [[mkdir>http://pubs.opengro...
-Also, on Visual Studio, there is _mkdir and _wmkdir API&...
*get the last character of std::string [#i25232b6]
- use rbegin API¬e{get-the-last-element-of-a-stdstring...
#geshi(c++){{
char lastCharacter = *string.rbegin();
}}
- If c++11 is available, use string.back()
* how to get a string which express time information [#c4...
- use time_t and ostringstream¬e{cpp_date_time:[[C++ D...
#geshi(c++){{
void getTimeString(std::string& result)
{
time_t now = time(0);
tm ltm;
localtime_s(<m, &now); // get the local time
std::ostringstream ostr; // use ostringstream to for...
ostr << ltm.tm_year + 1900; ...
ostr << std::setw(2) << std::setfill('0') << ltm.tm_m...
ostr << std::setw(2) << std::setfill('0') << ltm.tm_m...
ostr << std::setw(2) << std::setfill('0') << ltm.tm_h...
ostr << std::setw(2) << std::setfill('0') << ltm.tm_m...
ostr << std::setw(2) << std::setfill('0') << ltm.tm_s...
result = ostr.str();
}
}}
-itoa was a good function to convert an integer number to...
-itoa_s(the alternative of itoa) doesn't convert the form...
-if WINAPI is available, use [[CString>http://stackoverfl...
終了行:
[[メモ]]
メモに全部突っ込んで書いていたら,まさかの「サイズがデカ...
しょうがないので,C/C++系のトラブルだけこっちに移すことに...
#contents
*argcとargv [#v7a9a87c]
int main(int argc, char **argv)
-が一般的な宣言
-''arg''uments ''c''ount(argc), ''arg''uments ''v''alue(a...
*sizeof [#o204777d]
-sizeof()の返り値
|OS|>|>|>|~Windows XP|>|>|>|~FreeBSD|
|コンパイラ|VS 2008|VS 2005|.NET 2003|VS6|gcc(C)|gcc(C++)...
|char|>|>|>|>|>|>|>|1|
|unsigned char|>|>|>|>|>|>|>|1|
|short|>|>|>|>|>|>|>|2|
|int|>|>|>|>|>|>|>|4|
|long int|>|>|>|>|>|>|>|4|
|float|>|>|>|>|>|>|>|4|
|double|>|>|>|>|>|>|>|8|
*ダイアログをMFCダイアログから呼び出すと反応が異様に遅い...
-C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3...
-を読み出そうとして遅くなってるっぽ.
-何故,読み出すようになったのか・・・それだけが分からない...
[[:未解決]]
*CTimeを使わずに時間を取得する [#r3754c09]
-time.hを使う
struct tm *timeinfo;
time_t timer;
timer = time(NULL);
timeinfo = localtime(&timer);
strftime(buffer, length, "%m%d-%H%M%S", timeinfo);
-もっと短い時間(ミリ秒とか)を取得する場合は[[GetTickCount...
*floatとdoubleの違いについて [#l55831b8]
-[[float vs. double>http://homepage1.nifty.com/herumi/pro...
*C++のprivateなポインタ変数をreturnで外に出す [#g9842975]
-クラスでprivateで宣言したポインタ変数を,return でクラス...
#geshi(c++,number){{
#include <stdlib.h>
#include <stdio.h>
class Hoge{
public:
Hoge(){memory = new int;};
~Hoge(){delete memory;};
private:
int* memory;
public:
int* a(void){return memory;}
};
int main(int argc, char **argv){
Hoge *a = new Hoge();
int* b;
b = a->a(); //←ここで問題なくポインタを取得できる
*b = 5; //←ここで変更できてしまう
return 0;
}
}}
-private変数をreturnする段階でアウトなんじゃね?と思うん...
-ポインタが指す番地の中身は変更できるが、ポインタが指す番...
*enumの定義方法 [#ve588d6d]
-いっつも忘れるので自分用のmemo
enum 型 {値1, 値2, ... 値N };
-Example
enum the_sin {PRIDE, GLUTTONY, GREED, SLOTH, WRATH, ENVY...
*実行時にMSVCR80.DLL (MSVCR80D.DLL?) が無いと言われる [#g...
-OpenCVのデバッグ用ライブラリとリンクした後,実行時に言わ...
-以下の2点を修正
--highguid.libを外した
--highguid.libをビルドしなおし
-あとcxcored.libをリンクすると,heapがどうの,と文句を言...
ジャンル[[:OpenCV]][[:未解決]]
*fatal error C1010: プリコンパイル済みヘッダーの検索中に...
-プリコンパイル済みヘッダが定義されてるプロジェクトに自身...
-MFCのダイアログベースのプロジェクトの場合,''stdafx.h''...
-cppファイル側で,ヘッダファイルをincludeする前に
#include "stdafx.h"
#include "xxxx.h"
-としてやればエラーは回避できる
-プロジェクトのプロパティで「''プリコンパイル済みヘッダを...
ジャンル[[:Visual Studio]]
*fatal error C1020: 予期しない #endif です。 [#med01e84]
-"stdafx.h"をインクルードすると,それ以前のプリプロセッサ...
-よって,下記のようにWindowsの場合はインクルードして,そ...
#ifdef _WIN32
#include "stdafx.h"
#endif
-この場合はstdafx.hへのincludeは諦め,「''プリコンパイル...
ジャンル[[:Visual Studio]]
*fatal error C1033: [#tdd35f4e]
-おそらくテンポラリなエラー
-Visual Studioでこれが起きる場合,IntelliSenseの更新とか...
ジャンル[[:Visual Studio]]
*error C2062: 型 'char' は不要です。 [#xc0bd5af]
-smallと言う変数名は予約語
-RpcNdr.hを(どういう経緯でincludeしたかは知らないが)inclu...
#define small char
-とされている.
-と言うわけで,変数名smallを使用するとcharを宣言したこと...
-レアなエラーかも.
ジャンル[[:Visual Studio]]
*error C2064: 引数を取り込む関数には評価されません。 [#gf...
-変数と関数で同じ名前を使用すると発生する
-変数が優先されるらしい.
time_t time;
time = time(NULL); //関数のtimeが正しく取り扱われない
ジャンル[[:Visual Studio]]
*error C2059: 構文エラー : サフィックスが無効です。 [#g5e...
-変数名の最初に数字を用いるとエラーになる.
#geshi(c++){{
int 3DPoints[200]; // <- 変数名の頭に数字は使えない
}}
ジャンル[[:Visual Studio]]
*error C2065: 'M_PI' : 定義されていない識別子です。 [#p09...
-M_PIはmath.hで定義されてる円周率
-しかし,math.hをincludeしただけではdefineされない
-_USE_MATH_DEFINESをdefineする必要がある
-ちなみにVC++6では定義されてないとのうわさ.
#geshi(c++){{
#define _USE_MATH_DEFINES // <-これが一番大事♪
#include <math.h>
int main(){
printf("%f\n", M_PI);
}
}}
ジャンル[[:Visual Studio]]
*error C2381: 'exit' : 再定義 ; __declspec(noreturn) が異...
-[[OpenGLとOpenCVの共存>OpenGLとOpenCVの共存#o909b031]]参照
*error C2679: 二項演算子 '<<' : 型 'const largeNumber' の...
-error C2679: binary '<<' : no operator found which takes...
-cppunitを使ってテストをビルドしようとしたら、このエラー...
-下記、assertionを使うと、OStringStreamに << 演算子で出力...
#geshi(c++,number=on,start=38){{
template <class T>
struct assertion_traits
{
static bool equal( const T& x, const T& y )
{
return x == y;
}
static std::string toString( const T& x )
{
OStringStream ost;
ost << x; // error
return ost.str();
}
};
}}
-このOStreingStreamはstd::ostringstream として、Stream.h...
-なので、この operator << を定義する必要がある
-headerファイル
std::ostream& operator << (std::ostream& out, const clas...
-cppファイル
std::ostream& operator << (std::ostream& out, const clas...
{
out << right.getString(); // 適当な処理を行う
return out;
}
-[[後述>#uee91c54]]するように、ヘッダファイルと実装を切り...
*error C3861: 'min'識別子が見つかりませんでした [#ua5dc299]
-'max'も同じく
-Visual Studio 2005からVisual Studio 2008に変更したら起きた
-どうやら,min,maxは非標準のマクロだったらしい.
-std::min, std::maxでリプレースするのが妥当かと.
std::max(a, b)
-しかし,それでもダメなときがある.
error C2780: 'const _Ty &std::max(const _Ty &,const _Ty ...
-引数にテンプレート関数を使ってる関係で,どうやら,引数の...
-両方の引数の型が違うとこける模様.
double d = 1.0;
int i = 0;
std::max(i, d); // ←ここでdoubleとintの比較なのでこける
-ってな具合に.
-静的キャストを使って回避しよう
std::max(1.0, (double)0);
*error D8016 : コマンド ライン オプション '/GL' と '/ZI' ...
-[[C/C++のトラブル集#Visual Studio .NETでプロファイラを使...
ジャンル[[:Visual Studio]]
*warning C4390: プロトタイプされている関数が呼び出されま...
-クラスのコンストラクタが引数が無いのに、空っぽのカッコ付...
class CHogehoge{
public:
CHogehoge() {};
};
main(){
CHogehoge temp(); // ←こいつが警告を引き起こす
//CHogehoge temp; // 正しくは、カッコ無しで宣言する
}
-参考:[[コンパイラの警告 (レベル 1) C4930>http://msdn.mic...
*warning C4819:ファイルは、現在のコード ページ (932) で表...
-OpenCVをVisual Studio 2005で利用するとこのwarningが出る.
-cv/cvcompat.h が原因.
-Visual Studio 2005でcv/compat.hを編集(一文字入力してから...
-参考:[[Visual C++ 2008 Express Edition - OpenCV@Chihara...
ジャンル[[:OpenCV]][[:OpenCV 1.1]][[:OpenCV 2.0]][[:OpenC...
-Visual Studio 2008 + OpenCV 2.2 ではlegacy/compat.hpp が...
-上記方法では何故かwarningが消えない.
-原因は追求中.
-対症療法と根本的な解決方法を1つずつ
- #pragma を使って warning を 抑制
#geshi(c++,number){{
#pragma warning(disable : 4819)
#include <cv.h>
#pragma warning(default: 4819)
}}
--上記のようにwarningを吐き出すファイルの直前と直後をprag...
--参考:[[【VC++】OpenCVのヘッダが C4819ワーニングを出し...
- 正しいファイルをインクルードする
--OpenCV 2.2 でファイル構造が大幅に変わった.
--C++インタフェース用のファイルとCインタフェース用のファ...
--旧来の cv.h や cxcore.h のincludeも compatibility とし...
--それらをincludeすると,上記C4819 warningが発生する.
--対応するヘッダファイルを opnecv2 以下から探してくれば良い
---cxcore.h <-> opencv2/core/core_c.h (Cインタフェース) o...
---cv.h <-> opencv2/imgproc/imgproc_c.h (Cインタフェース)...
---highgui.h <-> opencv2/highgui/highgui_c.h (Cインタフェ...
---など(あくまでも一例)
-いずれにしろwarningなだけなんだが.
ジャンル[[:OpenCV]][[:OpenCV 2.2]][[:Visual Studio]]
*warning C4800: 'int' : ブール値を 'true' または 'false' ...
-原因:intをboolにキャストしている
#geshi(C++,number){{
bool function(int number){
return (bool)number; // warning C4800
}
}}
-int型の変数が0だったらfalse,それ以外の場合はtrueとする...
-しかし,intをboolにキャストしてはいけない(厳密には非bool...
-対処
-キャストするときに ''!= 0'' を使うのが一番簡単
#geshi(C++,number){{
bool function(int number){
return number != 0;
}
}}
-cf:[[コンパイラの警告 (レベル 3) C4800 (C++)>http://msdn...
*warning LNK4098: defaultlib '*****' は他のライブラリの使...
-プロジェクト->リンカ->コマンドライン->追加のオプションに...
-参照:[[http://d.hatena.ne.jp/kasei_san/20080109/p1]]
ジャンル[[:Visual Studio]]
*warning MSB8012: TargetPath does not match the Library's...
-古いVSのプロジェクトを新しいVSでビルドする発生する
-リンクするライブラリ名などを、$(TargetName) などのマクロ...
-自前で$(TargetName)などと書き換える必要があるっぽい
-参考:[[How do I fix warning MSB8012 in a static library ...
*0xc0150002 アプリケーションを正しく初期化できませんでし...
-OpenCV 1.1pre1にした途端,このエラーが出る人いるみたい
-[[Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x8...
--http://d.hatena.ne.jp/piy/20081130/1228020473
--http://d.hatena.ne.jp/cvcvcv/20081127/1227780876
--http://naruhodo.nazo.cc/modules/plzXoo/index.php?action...
--あたりを参考にした
-ミソは,VS .NET 2005 SP1+Redistribution Packageが必要
ジャンル[[:OpenCV]][[:OpenCV 1.1]][[:Visual Studio]]
*OpenCV 1.1でプロセス(プログラム)が終了しなくなる [#n127d...
-以下あたりを参照
--[[Yusuke Sugano/ Blog » OpenCV 1.1pre1>http://ww...
--[[OpenCV1.1のcvLoadimage|hidelab>http://ameblo.jp/hide...
-SHBrowseForFolder APIとOpenCV 1.1 pre1を使うとプロセスが...
-聞いただけで,使ったこと無いので原因はつかめてない.
-'Invalid allocation size'とか出るみたい
ジャンル[[:OpenCV]][[:OpenCV 1.1]][[:Visual Studio]][[:未...
*関数を使用しただけで,突然大量の「型が定義されていません...
-KLTの実装にて起きた.
-原因というより,C言語で起きてたので,仕様とも言うべき事...
-KLTの本体はC言語で書かれている割に,メインプログラムはC+...
-よって,メインプログラム内の適当な場所で関数をコールする...
-初歩的な・・・
ジャンル[[:Visual Studio]]
*Debug Assertion Failed! Expression: _pFirstBlock == pHea...
-概要
--DLL内で確保されたメモリを、DLL外で解放すると、"Debug As...
-発生条件
--[[参考サイト>https://stackoverflow.com/questions/188827...
--Visual Studio の設定でRuntime Library の設定を"Multi-th...
--全部で/MDd、/MD、/MTd、/MTと4パターンあるが、/MTdの場合...
--DLL内部で確保したメモリ配列をDLLの外部で解放する
--そのときに、Debug Assertion Failedが発生する
-手元の環境
--gtestを使ってテストプログラムを書いていたときに遭遇
--gtestを使うためには、"Multi-threaded Debug (/MTd)"もし...
--さもないと、こんなエラーに遭遇する
error LNK2038: mismatch detected for 'RuntimeLibrary': ...
--で、Releaseではheapの状況とか確認しないので、見た目はエ...
--以下のようなプログラムで発生した (一部省略)
#geshi(c++){{
void function()
{
std::vector<cv::Point> imagePointsUndistorted; ...
cv::undistortPoints(imagePoints, imagePointsUndistort...
} ...
}}
--Multi-ThreadedかMulti-Threaded DLLかは、ランタイムライ...
--しかし、このためには、実行するコンピュータにランタイム...
--/MTもしくは/MTdの選択にすると、利用するランタイムライブ...
--プログラムサイズが増大するので、一長一短。
--最後の小文字のdは、Debug版を意味し、メモリの配列外アク...
--このランタイムライブラリで管理される部分がまさにstd::ve...
-解決方法
--std::vectorをDLLにわたす前に確保しておく。
#geshi(c++){{
void function()
{
std::vector<cv::Point> arrayPoints;
arrayPoints.reserve(1000); // 予め...
cv::undistortPoints(imagePoints, arrayPoints);// 予め...
} // これ...
}}
--ただし、この場合は事前に配列のサイズがわかっている必要...
--わからない場合は、余裕を持って多めに確保しておけば良い。
--なお、OpenCVを使っていたときにエラーに遭遇したが、本質...
*Visual Studio .NETでプロファイラを使う方法 [#da453f4d]
-Professional Edition のみ?
-VC++の場合(多分ほかも同じだと思うけれど)
+ビルド(B)→ガイド付き最適化のプロファイル(P)→インストルメ...
--リビルドが行われる
--Debugモードだとerror D8016が出たので無理かも
+ビルド(B)→ガイド付き最適化のプロファイル(P)→インストルメ...
--アプリケーションが起動するので,適当に動かす(最適化させ...
--アプリケーションを終了する
+ビルド(B)→ガイド付き最適化のプロファイル(P)→最適化(O)
--実行した情報がカウントして統計される
+ツール(T)→Visual Studio 2005 Command Promptを実行
+コマンドプロンプト上でコマンドを実行
C:\Program ... \VC\bin>pgomgr /summary XXXXXX\apli.pgd
--XXXXXXにはアプリのReleaseフォルダへのパス
--apliはソリューションの名前
+これでこんな表示が出るはず.長いのでリダイレクト推奨
Microsoft(R) Profile Guided Optimization Manager 8.00.50...
Copyright (C) Microsoft Corporation. All rights reserved.
PGD ファイル: \XXXXXXXX\apli.pgd 11/20/2008 12:54:52
モジュールの数: 1 関数の数: 389 Arc の数: 1248 値の数...
静的命令: 11054 基本ブロック: 1743 平均 BB サイズ: 6.3
動的命令: 327756730
entry static ...
関数名 count instr ...
tSubtractAverage 307200 93 1...
shift 1603470 90 ...
C2TSI::getInnerProductMap 240 181 ...
tLowPass 153600 322 ...
tPadZero 307200 122 ...
CTSI::SearchStartAndEnd 960 118 ...
CTSI::extractRawColumn 307200 29 ...
CTSI::getNormMap 480 58 ...
CTSI::getTimeSpaceImage 1442 357 ...
_cvGetRow 40560 9 ...
CTSI::loadImageFromImageFile 20164 23 ...
CTSI::loadImageFromImageFile 20164 11 ...
--右から3列目のdynamic instrが実行回数
--右から2列目の%totalがその関数が実行に要した時間
--一番右のrun totalが実行時間の累計和
+次回ビルドするときに何か言われることがあるが,プロファイ...
ジャンル[[:Visual Studio]]
*FILE*構造体 [#p34ae5f5]
**int fseek(FILE *fp, long offset, int whence); [#edbb9329]
-whenceからoffsetバイト分移動したところに移動する
-whenceは,
--ファイルの先頭を表すSEEK_SET
--現在位置であるSEEK_CUR
--終端位置であるSEEK_END
-のどれか
**void rewind(FILE *fp); [#y5e9870c]
**FILE* fopen(const char *filename, const char *mode); [#...
-filenameとmodeの順番に注意!!
*コード要素''***''が読み取り専用であるため、追加と削除操...
-Visual Studio 2005で発生
-MFCダイアログボックスにボタンを追加し,イベントハンラを...
-原因はncbファイルの破損っぽい.
-http://blogs.yahoo.co.jp/dpdtp652/837997.html 参照
-ncbファイルはちなみにintellisenseの情報を保存したファイ...
-ソリューションを1度閉じた後,ソリューションと同じフォル...
-再びソリューションを開くと問題が解決している
ジャンル[[:Visual Studio]]
*コード要素''***''が読み取り専用であるため、追加と削除操...
-Visual Studio 2010で発生
-MFCダイアログボックスにボタンを追加し,イベントハンラを...
-原因はインテリセンスの保存されているsdfファイルの模様
-ソリューションを1度閉じた後,ソリューションと同じフォル...
-再びソリューションを開くと問題が解決している
-また、だいたいのクラスウィザードのエラーはこれ
ジャンル[[:Visual Studio]]
*プロジェクトにクラスの追加を行うとVisutal Studioがフリー...
-メニューからクラスの追加操作を行うだけでVisual Studioが...
-原因は[[コード要素が読み取り専用..>C/C++のトラブル集#m57...
-ncbファイルを削除すること
ジャンル[[:Visual Studio]]
*CRとLF [#ya5e367e]
-CRが\rであり,Mac OS(9まで)などで使われていた改行コード
-LFが\nであり,Unix系のOSなどで使われている改行コード
-WindowsではCR+LFであり,\r\nで表される
*コンソール画面が消えない [#p918f671]
-%%OpenCV 2.1 にバージョンアップしてから,ときたま実行し...
-%%OpenCV 2.1 + Visual Studio 2003 でコンソールアプリを作...
-%%実行して,正常終了→Visual Studioの画面が実行モードから...
-%%が,それでもコンソール画面が出たまま%%
-%%少ない事例だが,今のところOpenCVで生成したウィンドウは...
-%%Visual Studioを終了させてもダメ%%
-%%再起動させようにも,残ったコンソール画面が悪さをして再...
-%%OpenCV 2.1でウィンドウを生成して,ウィンドウを破棄(cvD...
-どうやら,Visual Studio 固有の問題らしく,Hotfixが公開さ...
-[[You cannot close a console window of an application af...
ジャンル[[:Visual Studio]]
*Visual Studio でコマンドラインアプリをデバッグする際,引...
-コマンドラインアプリで,引数により挙動を変えるプログラム...
-ただし,デバッグモードでは,引数なしの状態でしか実行され...
-プロジェクト(P)→プロジェクトのプロパティ(P)→デバッグ→コ...
-Visual Studio 2008 と 2003で最低限確認した.
-ウィンドウのレイアウトは違うかも
-添付はVisual Studio 2008の画面
http://tessy.org/wiki/index.php?plugin=attach&pcmd=open&r...
-参考:[[応用機械情報工学 2006@八戸工業大学機械情報技術学...
ジャンル[[:Visual Studio]]
*OpenCV のリポジトリにアクセスしようとしたらユーザ名とパ...
-本来はOpenCVのリポジトリにuserもpasswordも要らない
-最近¬e{when?:詳しくはいつだか覚えてないけれど};OpenCV...
--更にその昔は CVS でバージョン管理してた時代にはユーザ名...
-ちなみにリポジトリ間では互換性(?)が無いので,もう1度 ...
-そして2012年7月26日に[[OpenCVのリポジトリもSVNからgitに...
-参考:[[OpenCV Computer Vision Library ()>http://comments...
*ビットリバースとポップカウント [#z5e59158]
-bit表記した変数(例えば16bitのshort)の中に1がいくつ存在す...
-bit表記した変数(例えば16bitのshort)のbitの並びを前後逆に...
-例
|10進数|16進数|2進数|ビットリバース|ポップカウント|
|1|0x01|00000001|10000000|1|
|2|0x02|00000010|01000000|1|
|3|0x03|00000011|11000000|2|
|182|0xB6|10110110|01101101|5|
|88|0x58|01011000|00011010|3|
-ルックアップテーブルを使うと結構速い。¬e{bit-reversal...
-ビット単位で数える/並べ替えると著しく遅い¬e{popcount-...
-また、マスキングを使った分割統治法もある¬e{bit-revers...
*プリプロセッサ [#wc37cd85]
-#ifdefなんかはよく使う
#define
#if defined()
#if !defined()
-cppコマンドというのを使うと、プリプロセッサ後のファイル...
-C言語のプリプロセッサの定義に関して解説
-[[C言語のプリプロセスのメモ(Hishidama's C pre-process Me...
*C言語の文字コード変換について [#p839bf54]
-特に限定してないけれど、基本的にSJIS→UTF-8への変換ができ...
**::WideCharToMultiByte を使う方法 [#a4fffe34]
-WindowsのWIN32APIなので、広くWindowsで使うことができる。
-SJIS→UTF16→UTF8 の順で変換する。(逆も然り)
-参考:[[its55 lab » C++でShift-JISをUTF-8に変換する...
-参考:[[its55 lab » C++でUTF-8をShift-JISに変換する...
-参考:[[WideCharToMultiByte 関数 - msdn>http://msdn.micro...
-参考:[[MultiByteToWideChar 関数 - msdn>http://msdn.micro...
-参考:[[GetTextCharset 関数 - msdn>http://msdn.microsoft....
-参考:[[IsTextUnicode 関数 - msdn>http://msdn.microsoft.c...
-参考:[[文字コードの変換ライブラリ | プログラマーズ雑記帳...
**iconvを使う方法 [#p82d755e]
#geshi(C++,number=on){{
iconv_t ic = iconv_open("SJIS", "UTF-8");
memcpy( in, utf8, sizeof(utf8) );
iconv( ic, &in, &in_size, &out, &out_size );
iconv_close(ic);
}}
-当然ながらiconvがインストールされてなければならない
-参考:[[LinuxのC言語で Shift-JIS と UTF-8 の相互変換 - か...
-参考:[[文字コードの変換ライブラリ | プログラマーズ雑記帳...
**ICUを使う方法 [#pdd60d10]
-クロスプラットフォーム対応のICU
-参考:[[ICU Shift_JISとUTF-8の変換 - Faith and Brave - C+...
-参考:[[ICU - International Components for Unicode>http:/...
-参考:[[C/C++あれこれ/文字コード変換ライブラリICUのサン...
-参考:[[utf 8 - C++ UTF-8 output with ICU - Stack Overflo...
-参考:[[ICU による文字コード変換ライブラリ - yanoの日記>h...
*std::string内で使える文字列検索関数 [#nabef9c5]
-STLにあるstd::string内にある関数
find()・・・指定した文字列が、最初に現れる位置を返す
rfind()・・・指定した文字列が、最後に現れる位置を返す
find_first_of()・・・指定した文字列の一部の文字が、最初...
find_last_of()・・・指定した文字列の一部の文字が、最後に...
find_first_not_of()・・・指定した文字列の一部に含まれな...
find_last_not_of()・・・指定した文字列の一部に含まれない...
-引用元:[[C++編(標準ライブラリ) 第1章 string>http:/...
*vector でfindする方法 [#w49a4d24]
#geshi(c++,number=on){{
#include <algorithm>
#include <vector>
std::vector<int> datas;
int needle;
std::vector<int>::iterator it = std::find(datas.begin(), ...
if(it == datas.end()){
//見つからなかった場合
std::cout << "Not Found" << std::endl;
}
}}
* '>>' should be '> >' within a nested template argument ...
-Visual Studio では通ったが、gccでは通らなかった
#geshi(C++, number){{
std::vector<std::vector<std::string>> dataArrayNG // '>'...
std::vector<std::vector<std::string> > dataArrayOK // こ...
}}
* cannot appear in a constant-expression [#cdd1e974]
-gcc で const の宣言と代入を同時に行うと、エラーになる&no...
*sleep について [#e129bb07]
-clock 関数や gettickcount 関数などがある
-[[時間測定関数の性能(分解能と最大値)のまとめ>http://ww...
*iostream のフォーマット指定子 [#gaba9f2e]
-printfに慣れてしまったので、書式指定がどうもしっくりこな...
-ゼロ埋め
cout << setfill('0') << setw(5) << 20 << endl;
-16進数、10進数、8進数も使える¬e{cpp-corresponds-iostr...
cout << oct << 42;
cout << dec << 42;
cout << hex << 42;
*typedef の順序 [#d06c8897]
-いつも混乱する¬e{how-to-use-typedef:[[typedefの使い方...
typdef int MyType;
* << operator のオーバーロード [#uee91c54]
-<< operator をオーバーロードしたら、error LNK2005 リンク...
-宣言と実装をヘッダとCPPで分ける必要がある。
* getopt を使おう [#l88cfe5d]
-オレオレ実装でオプションを受け付けるのでなく、なるべくge...
-[[向川先生の解説サイトが分かりやすい>http://omilab.naist...
*すべてのプログラマが読むべき記事10選 [#d9d4a97a]
-[[すべてのプログラマが読むべき記事10選 | POSTD>http://po...
-[[10 Articles Every Programmer Must Read>http://javarevi...
-[[What Every Computer Scientist Should Know About Floati...
-[[What Every Programmer Should Know About Memory>http://...
*クラスのoperatorを定義するときの戻り値の型 [#xfb43dfe]
-実験した上でまとめてるサイト¬e{operator-definition:[[...
-代入演算
foo& foo::operator = (const foo&);
-四則演算
const foo foo::operator + (const foo&);
-四則演算と代入
foo& foo::operator += (const foo&);
-比較演算
bool foo::operator == (const foo&);
-などなど
-[[クラスの operator を定義するとき、戻り値の型はどうすべ...
-実験した上で考察されているので、自分が理解する手助けにな...
*string [#k04dafd7]
-文字を消すときはeraseでchar のindex単位で削除できる
std::string hoge = std::string("foo");
hoge.erase(0,1);
std::cout << hoge << std::endl;
-実行結果
oo
*Visual Studio でcppunitをビルドするお話 [#c3ec0623]
-[[cppunit>http://sourceforge.net/projects/cppunit/]]¬...
-付属しているサンプルはdsw(VS6)でビルドする用なので、Vi...
-[[Visual Studio C++でCppUnitをビルドできない、そんなとき...
-というか、VisualStudio2012あたりだと、自前でテスト機能が...
-[[cppunit をVisual Studio で使うためのチュートリアル。>h...
-cppunit自体が古いのかなぁ。
*Sleep関数 [#i579fb1e]
-標準関数ではないので、実装系により、適当なファイルをイン...
-Windows標準はWindows.hにある
-unix系だと、unistd.hにsleepがある
-[[What is the proper #include for the function 'sleep' i...
*複数桁数の数字を文字列に変換する [#r83345d9]
-std::to_string を使うと便利。
-string ヘッダにある。
-[[Alternative to itoa() for converting integer to string...
*ある型が定義されているか確認する方法 [#se34d38f]
-C/C++の仕組みでやるのは無理
-define されてるヘッダのインクルードガードで判別するのが...
-[[c++ - How to check if a datatype is "defined"...
*Cコンパイラとプラットフォームを判定する定義済みマクロ [#...
||gcc|msvc|
|64bit (IA64)|__ia64__|_M_IA64|
|64bit (x86_64)|__x86_64__|_M_X64|
|32bit (x86)| __i386__|_M_IX86|
-Cコンパイラのプラットフォーム、コンパイラを判別する定義...
-メジャーなarchitecture/compiler による pre defined macros
-Alpha, AMD64, Arm, Arm64, Blackfin, Convex, Epiphany, HP...
-こんなアーキテクチャあるんだ・・
-[[Pre-defined Compiler Macros / Wiki / Architectures>htt...
-[[Pre-defined Compiler Macros / Wiki / Compilers>https:/...
*ビット操作 [#p5494fba]
-ビット操作だけでかなりの数学的に処理を再現できる
-特にループが無くビット操作で再現出来ると、くっそ速い。
-参考:[[Bit Twiddling Hacks>http://graphics.stanford.edu/...
*streamクラスのeof [#cdb4b69d]
-streamクラスがC++の標準ライブラリで定義されている
-eofが返す値のタイミングをチェック
-[[【C/C++】 streamクラスのeofメンバ: 日々此精進>htt...
*Error: use of enum ‘AVCodecID’ without previous declarat...
-Ubuntu 12.04(32bit)に自前ビルドのffmpegをインストールし...
-Compile error using old ffmpeg with OpenCV
-ffmpegとOpenCVのバージョンが食い違うと発生する
-Old types and enums cause this error
-型やenumが食い違う
-ffmpegを最新にしたり、パッケージからインストールしたり、...
-cap_ffmpeg_impl.hpp内のenumを書き換える方法も示唆されて...
-参考:[[OpenCVふのフォーラムでの回答>http://answers.openc...
-参考:[[ffmpegをソースからビルドしてOpenCVをビルドする方...
-参考:[[OpenCV Lover: Install Opencv 2.3.1 on Ubuntu 12.0...
-参考:[[Debian上にffmpegをインストールする方法>http://sup...
*C++でvectorの参照渡しを省略可能にする方法 [#u71944f4]
-普通の引数はオプションにすることが可能
#geshi(c){{
void func(int a, int b = 0);
}}
-と宣言されていれば、
#geshi(c){{
func(1); // func(1, 0) と等価
func(1, 0); // 上記と同じ挙動
func(1, 1); // いずれもエラーにならない
}}
-という呼び方が可能
-ただ、引数にvector何かをオプションで渡したいときに悩む
#geshi(c){{
void func(int a, const std::vector<int>& b = std::vector<...
}}
-こうすれば、bのvectorはオプション扱い
-constを付けないと、gccだと叱られる
-参考:[[shnya_mさんはTwitterを使っています: "@uchumi...
-参考:[[gist:5048103>https://gist.github.com/anonymous/50...
* invalid initialization of non-const reference of type [...
-Visual Studio では発生しないが、gccで発生するエラー
-関数の実引数が一時変数の時は、constを付けないと、エラー...
-普通の変数と一時的な変数
--int a などは普通の変数
--a + 1 の結果もintだが、格納するまでは一時変数
-サンプルコード
#geshi(c++){{
inline myClass myClass::clone() const
{
myClass m;
return m;
}
void function1(myClass& before)
{
return;
}
void function2(const myClass& before)
{
return;
}
int main(int argc, char **argv)
{
myClass a = myClass();
function1(a);
function1(a.clone()); // this causes error 'invalid i...
function2(a);
function2(a.clone());
return 0;
}
}}
--前述のサンプルコードのうち、2つ目のcall だけがgccでエラ...
--Visual Studio では発生しない¬e{vs-version:Visual Stu...
-参考:[[最近のはまりポイント - 三次元日誌>http://d.hatena...
-参考:[[リリカル☆Lisp開発日記 » Blog Archive &ra...
* how to create a directory using c++ + WINAPI [#r011204d]
- use CreateDirectory API from WINAPI
#geshi(c++){{
void dumpdata(std::string dirname, std::vector<double> da...
{
CreateDirectory(dirname.c_str(), NULL);
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
std::cerr << "directory " << dirname << " already...
}
}
}}
-[[c++ - Create a directory if it doesn't exist - Sta...
-[[c++ - How to find out if a folder exists and how to cr...
-if you need non-windows API, [[mkdir>http://pubs.opengro...
-Also, on Visual Studio, there is _mkdir and _wmkdir API&...
*get the last character of std::string [#i25232b6]
- use rbegin API¬e{get-the-last-element-of-a-stdstring...
#geshi(c++){{
char lastCharacter = *string.rbegin();
}}
- If c++11 is available, use string.back()
* how to get a string which express time information [#c4...
- use time_t and ostringstream¬e{cpp_date_time:[[C++ D...
#geshi(c++){{
void getTimeString(std::string& result)
{
time_t now = time(0);
tm ltm;
localtime_s(<m, &now); // get the local time
std::ostringstream ostr; // use ostringstream to for...
ostr << ltm.tm_year + 1900; ...
ostr << std::setw(2) << std::setfill('0') << ltm.tm_m...
ostr << std::setw(2) << std::setfill('0') << ltm.tm_m...
ostr << std::setw(2) << std::setfill('0') << ltm.tm_h...
ostr << std::setw(2) << std::setfill('0') << ltm.tm_m...
ostr << std::setw(2) << std::setfill('0') << ltm.tm_s...
result = ostr.str();
}
}}
-itoa was a good function to convert an integer number to...
-itoa_s(the alternative of itoa) doesn't convert the form...
-if WINAPI is available, use [[CString>http://stackoverfl...
ページ名: