検索結果 199 件

by a5ua
5年前
フォーラム: C言語何でも質問掲示板
トピック: <thread>と_kbhitについて
返信数: 2
閲覧数: 2454

Re: <thread>と_kbhitについて

while (!_kbhit()) { この条件だと、何かキーが押されるとループを抜けてしまいます。 _getch()は文字が入力されるまで待機するため、 今回のケースでは_kbhit()を使わずとも、単なる無限ループで十分です。 キーが押されていないときになにか別の処理を行いたい場合は、 ループの中に、if (_kbhit())という条件を入れてもいいでしょう。 void ControlThread() { char c; while (true) { c = _getch(); if ((c == 0x1B) || (c == '0')) { gThreadDone = true; br...
by a5ua
5年前
フォーラム: C言語何でも質問掲示板
トピック: ゲーム配布時、CSVが詰まったフォルダをなんとかしたい
返信数: 7
閲覧数: 4740

Re: ゲーム配布時、CSVが詰まったフォルダをなんとかしたい

http://dxlib.o.oo7.jp/dxtec.html#T11
公式ページに書いてありますが、FileRead_open()などDXアーカイブ対応の関数を使用すれば、
画像ファイルに限らず、アーカイブ内の任意のファイルを読み込むことができます。
by a5ua
5年前
フォーラム: C言語何でも質問掲示板
トピック: emplace_back()について
返信数: 2
閲覧数: 2120

Re: emplace_back()について

まずemplace_back()にはそのリストの型(std::shared_ptr<Enemy>)のコンストラクタ引数を渡すものという理解であっていますか? その理解で合っています。 一口にコンストラクタと言っても、以下に示すように複数のコンストラクタが定義されています。 https://cpprefjp.github.io/reference/memory/shared_ptr/op_constructor.html 今回のケースでは、std::shared_ptr<Enemy>のムーブコンストラクタ(上記リンクの(10))が呼ばれ、 emplace_back()の動作的としては、push...
by a5ua
5年前
フォーラム: C言語何でも質問掲示板
トピック: VS2017&/std:c++17でboost::bimapがコンパイルエラー
返信数: 4
閲覧数: 2948

Re: VS2017&/std:c++17でboost::bimapがコンパイルエラー

1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(43): error C2143: 構文エラー: ',' が '<' の前にありません。 1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(56): note: コンパイル対象の クラス テンプレート インスタンス化 'boost::bimaps::relation::support::data_extractor_implementation<boost:...
by a5ua
6年前
フォーラム: C言語何でも質問掲示板
トピック: 【DXライブラリ】printfDX関数がif文に影響する?
返信数: 2
閲覧数: 2493

Re: 【DXライブラリ】printfDX関数がif文に影響する?

void Map::calc()において何もボタンが押されていなかったら、
vx,vyが未初期化のまま
_x += vx;
_y += vy;
が実行される点が気になりました。
by a5ua
7年前
フォーラム: C言語何でも質問掲示板
トピック: C2280 削除された関数を使用しようとしています というエラーが出たのですが…
返信数: 7
閲覧数: 12653

Re: C2280 削除された関数を使用しようとしています というエラーが出たのですが…

CharaData構造体がconstメンバー変数CharaCodeを持っているため、 デフォルトコンストラクタによるオブジェクト構築ができないことがエラーの原因と思われます。 ①CharaCodeのconstを外すか、 ②以下のように、CharaCodeを初期化するためのコンストラクタを定義する必要があるでしょう。 struct CharaData { // キャラクターデータ CharaCode(int code) : CharaCode(code){} const int CharaCode; // キャラコード int Graphic[64]; // キャラのグラフィックハンドル変数 i...
by a5ua
7年前
フォーラム: C言語何でも質問掲示板
トピック: C++ DXLib、画像反転について
返信数: 2
閲覧数: 3685

Re: C++ DXLib、画像反転について

DrawRotaGraphにはTurnFlagという左右反転のフラグがあります。
http://dxlib.o.oo7.jp/function/dxfunc_graph1.html#R3N10
by a5ua
7年前
フォーラム: C言語何でも質問掲示板
トピック: tuple操作について
返信数: 14
閲覧数: 6377

Re: tuple操作について

Boost.Fusionが使えるかもしれません。

サンプルコードです。
http://ideone.com/CaHpiH
by a5ua
7年前
フォーラム: C言語何でも質問掲示板
トピック: }がないとエラーが出る
返信数: 3
閲覧数: 2132

Re: }がないとエラーが出る

77行目のelseに対応する'}'が無いように見受けられます。
by a5ua
7年前
フォーラム: C言語何でも質問掲示板
トピック: [C++]std::make_sharedとアップキャスト
返信数: 2
閲覧数: 2512

Re: [C++]std::make_sharedとアップキャスト

std::make_shared<Base>(...); は内部で
new Base(...); 相当のことを実行しています。

純粋仮想関数を含むクラスのインスタンスを
生成することはできないので、そのようなエラーが出ているのでしょう
by a5ua
8年前
フォーラム: C言語何でも質問掲示板
トピック: 文字列を格納する配列の扱い方について
返信数: 3
閲覧数: 2533

Re: 文字列を格納する配列の扱い方について

> なぜ上手くいかないのかが分かりません。 name = string; はポインタを代入しているだけであり、文字列全体をコピーするわけではありません。 name はすべて、stringという配列の先頭アドレスを指すことになります。 > 解決策を教えてください。 では、いくつかの選択肢とヒントを (1)最も簡単な解決策は、二次元配列を使うことでしょうか char name[20][100]; (2)char *name[20];のままでやりたいのであれば、 ループ内でmalloc()を使いつつstrcpy()で文字列をコピーすれば良いでしょう (3)あるいは、C++の標準ライブラリを使うことも...
by a5ua
8年前
フォーラム: C言語何でも質問掲示板
トピック: 正規表現に関する質問です。
返信数: 1
閲覧数: 1694

Re: 正規表現に関する質問です。

以下の正規表現でいかがでしょうか?

コード:

".*?([0-9a-zA-Z!-~]+)[^0-9a-zA-Z!-~]*笑"
↓参考までにPerlでの実行結果です
http://ideone.com/usJQCg
by a5ua
8年前
フォーラム: C言語何でも質問掲示板
トピック: boostを使ったxmlファイルの値の取得ができません.
返信数: 3
閲覧数: 2408

Re: boostを使ったxmlファイルの値の取得ができません.

BOOST_FOREACH (const auto &child, pt.get_child("ATExport.Photo.Rotation")){ ph->sensor_mat(0,0) = child.second.get<float>("M_00"); } コンパイルしてませんが、以下のようなコードでいかがでしょうか? for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { std::ostringstream oss; oss << "Rotation.M_" << i << j; ph->sensor_mat(i, ...
by a5ua
9年前
フォーラム: C言語何でも質問掲示板
トピック: 正規表現で連続した数字を表現したい
返信数: 3
閲覧数: 3878

Re: 正規表現で連続した数字を表現したい

コード:

(\d)\1{3}
はいかがでしょうか?
by a5ua
9年前
フォーラム: C言語何でも質問掲示板
トピック: 文字列の比較。
返信数: 3
閲覧数: 2078

Re: 文字列の比較。

scanf_s()の使い方が間違っています。 scanf_sで文字列を入力するときは、可変長引数部分にポインタだけでなくバッファサイズを渡す必要があります。 以下のURLも参照してください。 https://msdn.microsoft.com/ja-jp/library/w40768et.aspx scanf および wscanf とは異なり、scanf_s および wscanf_s では、c、C、s、S の各型、または [] で囲まれた文字列コントロール セットのすべての入力パラメーターに対してバッファー サイズを指定する必要があります。 バッファー サイズ (文字単位) は、バッファーま...
by a5ua
9年前
フォーラム: C言語何でも質問掲示板
トピック: vector宣言時の要素数について
返信数: 3
閲覧数: 4347

Re: vector宣言時の要素数について

クラス(もしくは構造体)のメンバー変数のコンストラクタを呼ぶにはメンバーイニシャライザを使用します。 //Data.h class Data{ //略 public: static struct _SaveData{ _SaveData() : Belongings(10) // 要素数10で初期化 { } BYTE stage; BYTE money; BYTE score; vector<int> Belongings; bool GraphFlag1, GraphFlag2, GraphFlag3, GraphFlag4, GraphFlag5, GraphFlag6, GraphFla...
by a5ua
9年前
フォーラム: C言語何でも質問掲示板
トピック: コードの間違いを指摘して下さい
返信数: 3
閲覧数: 2259

Re: コードの間違いを指摘して下さい

8行目:fに関するfor文に、bが使われています。
for(f=0;b<3;f++){
by a5ua
9年前
フォーラム: C言語何でも質問掲示板
トピック: update()を通らない
返信数: 7
閲覧数: 3627

Re: update()を通らない

IDirect3DDevice9::Clear() IDirect3DDevice9::BeginScene() IDirect3DDevice9::EndScene() IDirect3DDevice9::Present() の使い方に問題があると思われます。 描画処理はBeginScene()~EndScene()の間に実行する必要があります。 現状の処理では、BeginScene()~EndScene()の間に描画処理が一つもありません(Draw()関数) したがって、Clear()した結果が画面に反映されていると考えられます。 試しに添付のソースコードで、Clear()とBeginSc...
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: C++で配列のバグ(?)が消えません
返信数: 12
閲覧数: 4400

Re: C++で配列のバグ(?)が消えません

ActionClass::ActionClass(){ Stage = StageClass(); Stage.CreateStage("#### # " "# # ##" " # ###" " # ####" " ## ###" " #" " ## # " " ## " " ## # " "## ##",10,10,100); } 上記2行目には問題があります。 StageClass()で一時オブジェクトが生成された後、全メンバーがStageにコピーされます。 そのため、一時オブジェクトのデストラクタが呼ばれたあと、メンバー変数のデストラクタが呼ばれると、 同じアドレスに対してdelete...
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: 同じコードのはずなのに結果が違います...
返信数: 3
閲覧数: 2518

Re: 同じコードのはずなのに結果が違います...

23行目が違います。

前者:
for(i=0;i<2;i++)

後者:
for(i=0;i<2;i++);
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: RGBA配列からグラフィックハンドルを作成したい
返信数: 7
閲覧数: 4612

Re: RGBA配列からグラフィックハンドルを作成したい

とんでもなく重いとおっしゃっていますが、現状どのくらい時間がかかっているのでしょうか?
また、目標としてどのくらい高速化したいのでしょうか?
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: VC++のデバッグ時にstd::listのpush_backでセグメンテーション違反が発生します
返信数: 5
閲覧数: 4891

Re: VC++のデバッグ時にstd::listのpush_backでセグメンテーション違反が発生します

マズイところを指摘します。(下記ソースコードの、//// コメントの部分) int WINAPI WinMain(HINSTANCE h_instance, HINSTANCE h_prev_instance, LPSTR command_line, int command_show) { try { MainWindow main_window(h_instance); //// このオブジェクトの寿命は、tryブロック内部 main_window.create(L"milfeulle"); main_window.show(); } catch(const std::exception&)...
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: ディレクトリ内のすべてのファイル名を取得する
返信数: 13
閲覧数: 18771

Re: ディレクトリ内のすべてのファイル名を取得する

Visual Studio 2013なら<filesystem>を使うのがお手軽だと思います。 #include <iostream> #include <vector> #include <string> #include <filesystem> int main() { std::vector<std::string> file_list; // カレントディレクトリ以下のファイル名を取得する // 再帰的にファイル名を取得する場合は、std::tr2::sys::recursive_directory_iteratorを使う for (std::tr2::sys::directory_...
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: C++ 例外について
返信数: 2
閲覧数: 1598

Re: C++ 例外について

throw 1;に対応する例外ハンドラが無いので、std::terminate()が呼ばれてプログラムが強制終了します。 以下のように例外ハンドラを記述すれば、デストラクタが呼ばれます。 int main() { try { Class c; throw 1; } catch (...) { } return 0; } ちなみに、std::terminate()が呼ばれたときにローカル変数のデストラクタが呼ばれるかどうかは 処理系の実装依存みたいです。参考: http://en.cppreference.com/w/cpp/error/terminate 私の手元の環境(VC++2010)では...
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: DxLib製ゲームの複数解像度対応
返信数: 4
閲覧数: 2140

Re: DxLib製ゲームの複数解像度対応

http://homepage2.nifty.com/natupaji/DxL ... html#R11N4
SetWindowSizeExtendRate()を使えば特別な処理なしに、複数解像度に対応できると思います。
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: 派生クラスへのポインタが勝手にNULLになる
返信数: 2
閲覧数: 2109

Re: 派生クラスへのポインタが勝手にNULLになる

【IEffect.hの抜粋】 IEffect(int m) : mMode(m) , mlpNowEffect(NULL) { //初期モード指定版コンストラクタ。 mlpNowEffect = getLpNewEffect(mMode); } IEffect() { //コンストラクタ(オーバーロード)。IEffectクラスのインスタンスが生成されたときに呼ばれる IEffect(0); } 引数なしのコンストラクタで、引数ありのコンストラクタを呼んでいますが、これはおそらく意図した動作をしません。 IEffect(0);という記述は、IEffectクラスの一時オブジェクトを作成してすぐに破...
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: 変数の勝手な同期
返信数: 10
閲覧数: 3594

Re: 変数の勝手な同期

for(i=0; i<=N; i++){ printf("data[%d]=%d\n",i,&data[i]); data[i].Symbol = (char *)malloc(sizeof(char)*(N+1)); data[i].Symbol=NULL; printf(" Symbol=%d\n",&data[i].Symbol); data[i].Code = (char *)malloc(sizeof(char)*(N+1)); data[i].Code =NULL; printf(" Code=%d\n\n",&data[i].Code); } malloc()で得たポインタをN...
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: 変数の勝手な同期
返信数: 10
閲覧数: 3594

Re: 変数の勝手な同期

問題点はたくさんありますが、いっぺんに指摘しても混乱すると思うので、まずはひとつ 文字列のコピーには、strcpyを使いましょう。 while( tok != NULL){ if(line==1){ data[i].Symbol=tok; // 文字列のコピーではない。tokが指す文字列を変更すれば、data[i].Symbolも変更される printf("data[%d].Symbol=%s\n",i,data[i].Symbol); }else if(line==2){ data[i].Code=tok; // 文字列のコピーではない。tokが指す文字列を変更すれば、data[i].Cod...
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: 文字の変換について
返信数: 5
閲覧数: 2821

Re: 文字の変換について

#include <stdio.h> #include <string.h> int main() { char x[100], y, z; int count; printf("string="); scanf("%s", x); count = 0; y = 0; while (count < 100){ if (x[count]=='\0'){ break; } else { count++; y = x[count]; if ((y >= 'A') && (y <= 'Z')){ z = y + 0x20; printf("%c", z); } else ((y >= 'a') &&...
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: 自分で改造したプログラムがわかりません
返信数: 6
閲覧数: 2505

Re: 自分で改造したプログラムがわかりません

//説明になっているかわかりませんが。。。 vector<PS> dictionary; PS ps(string("qw4iqty")); dictionary.push_back(ps); 上のように、dictionaryに要素を追加するには、PS型のオブジェクトを作らなければならないように見えます。 しかし、実際には以下のコードで要素を追加できます。 これは、PS(const string &s)が「変換コンストラクタ」として暗黙的に呼び出されているためです。 vector<PS> dictionary; dictionary.push_back(string("qw4iqty"));...
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: 自分で改造したプログラムがわかりません
返信数: 6
閲覧数: 2505

Re: 自分で改造したプログラムがわかりません

sortせずともうまくいったのは予想外です
PSのコンストラクタ(PS.h 11行目)で文字列ペアのfirst要素をソートしていますよ。
例えば、"the"という文字列からは、("eht", "the")というPSのオブジェクトが生成されます。
by a5ua
10年前
フォーラム: C言語何でも質問掲示板
トピック: メモリリークを解消したい
返信数: 10
閲覧数: 5082

Re: メモリリークを解消したい

/*--------------------------------------------------------------- 後端にpush ---------------------------------------------------------------*/ template<class U> void push(const U &n) { cell<U> *c = new cell<U>; c->data = n; c->prev = head.get().prev; c->next = &static_cast<cell_base&>(head.get()); c->...
by a5ua
11年前
フォーラム: C言語何でも質問掲示板
トピック: visual C++ 2010 expressの動作について
返信数: 5
閲覧数: 2522

Re: visual C++ 2010 expressの動作について

F5(デバッグ開始)による実行なら、mainの最後にブレークポイントでOK
Ctrl+F5(デバッグなしで開始)による実行の場合は、プロジェクトのプロパティで
構成プロパティ>リンカー>システムで、サブシステムが「コンソール (/SUBSYSTEM:CONSOLE)」にすると、
実行しても、コマンドプロンプトが出たままになります。
by a5ua
11年前
フォーラム: C言語何でも質問掲示板
トピック: printf()等で使用されている可変型の引数について
返信数: 3
閲覧数: 1574

Re: printf()等で使用されている可変型の引数について

可変長引数リストを処理するvprintf関数を使うとできます。
可変長引数リストを取得するには、va_startマクロを使います。

コード:

int printf2(const char *format, ...)
{
	int ret;
	va_list args;
	va_start(args, format);
	ret = vprintf(format, args);
	va_end(args);
	return ret;
}
by a5ua
11年前
フォーラム: C言語何でも質問掲示板
トピック: 二点を結ぶ線の中点から垂直にある程度離れた点
返信数: 6
閲覧数: 3840

Re: 二点を結ぶ線の中点から垂直にある程度離れた点

複素数を使えば、簡単に求められると思います。 #define _USE_MATH_DEFINES // for Visual Studio #include <cmath> #include <complex> std::complex<double> CalcX(std::complex<double> A, std::complex<double> B) { return (A + B) / 2.0 + (B - A) * std::polar(1.0, M_PI / 2.0); } (A + B) / 2.0 は A と B の中点で、 (B - A) * std::polar(1.0,...
by a5ua
11年前
フォーラム: C言語何でも質問掲示板
トピック: Windowsバージョン取得について
返信数: 8
閲覧数: 3208

Re: Windowsバージョン取得について

DxLib.hにこんな定義があります。 バージョンの数字を16進数(%x)で表示してみると分かると思います。 // WINDOWSのバージョンマクロ #define DX_WINDOWSVERSION_31 (0x000) #define DX_WINDOWSVERSION_95 (0x001) #define DX_WINDOWSVERSION_98 (0x002) #define DX_WINDOWSVERSION_ME (0x003) #define DX_WINDOWSVERSION_NT31 (0x104) #define DX_WINDOWSVERSION_NT40 (0x105)...
by a5ua
11年前
フォーラム: C言語何でも質問掲示板
トピック: オーバーライドが邪魔です
返信数: 3
閲覧数: 1690

Re: オーバーライドが邪魔です

こんな感じでどうですかね?

コード:

template <int>
class Test;
 
template<> class Test<0> {
public:
	void func(){}
};
template<> class Test<1> : public Test<0> {
public:
	using Test<0>::func;
	void func(int){}
};
template<> class Test<2> : public Test<1> {
public:
	using Test<1>::func;
	void func(int, int){}
};
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 曲線移動
返信数: 24
閲覧数: 6904

Re: 曲線移動

書いてみました。こんな感じでしょうか。 以下のコードでは、赤と青の円が30フレームかけて入れ替わります。 パラメータ a, b, T を変えると楕円の大きさや速度が変化します。 // VCでM_PIを使うため #define _USE_MATH_DEFINES #include <cmath> // 周期Tフレームで1周する楕円軌道 namespace motion001 { // 中心の座標 const int x0 = 200; const int y0 = 100; // 楕円の形のパラメータ // 横幅 = 2a、縦幅 = 2b const int a = 100; const int...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: ifstreamで
返信数: 4
閲覧数: 3378

Re: ifstreamで

コード:

cout << buf;
は、bufをゼロ終端文字列とみなして出力するので、
bufのサイズは、ヌル文字'\0'の分を考慮して、size + 1としなければならないと思います。

もしくは、1文字ずつ出力することも考えられます。

コード:

for (int i = 0; i < size; ++i) cout << buf[i];
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: try文を用いたエラークラスのthrowの仕方
返信数: 6
閲覧数: 2864

Re: try文を用いたエラークラスのthrowの仕方

catchしたオブジェクトは、catchブロックを抜ければ自動で削除されるので、deleteの必要はありません。
誤解を与えそうなので補足しますが、
私が示したコードでは、例外オブジェクトはnewで確保していないので、deleteの必要がないという意味で書きました。
catchしたオブジェクトは特別にdeleteしなくてもよいという意味ではありません。
taketoshiさんが最初に示したコードのように、newで作成したオブジェクトは、当然deleteしなければなりません。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: try文を用いたエラークラスのthrowの仕方
返信数: 6
閲覧数: 2864

Re: try文を用いたエラークラスのthrowの仕方

throw 例外クラス(); とすれば、例外クラスの一時オブジェクトを作ってthrowすることができます。 catchしたオブジェクトは、catchブロックを抜ければ自動で削除されるので、deleteの必要はありません。 #include <tchar.h> #include <stdio.h> //エラークラスの定義 class error{ public: int EndApplication(); }; int error::EndApplication(){ printf("errorクラスからアプリケーションを終了します\n"); return 0; } //仮のクラス //ここか...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: メンバ変数のconst
返信数: 44
閲覧数: 15869

Re: メンバ変数のconst

class Hoge { public: Hoge( int n) : num(n) { cout << "コンストラクタが呼ばれました。値は" << num << "です" << endl; } void ShowNum() const { cout << num << endl; } // コンパイラが生成するデフォルトの代入演算子 Hoge &operator=(const Hoge &other) { // num は const なので代入できない num = other.num; return *this; } private: const int num; }; std::ve...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 入力の最後まで処理する
返信数: 2
閲覧数: 3192

Re: 入力の最後まで処理する

入力に失敗するまでループするというコードを書きます。 書き方を3通り紹介します。 #include <iostream> using namespace std; int main() { int d; // (1) for (;;) { cin >> d; if (cin.fail()) break; /* d を使った計算 */ } // (2) while (cin >> d) { /* d を使った計算 */ } // (3) while (scanf("%d", &d) != EOF) { /* d を使った計算 */ } } (1)では、無限ループの中で、整数dを読み込んだ後、 ス...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: UNIX時間と日付時刻の相互変換
返信数: 9
閲覧数: 13682

Re: UNIX時間と日付時刻の相互変換

コードの外見を見て、気づいた点をいくつか指摘したいと思います。 isLeapYearのように真偽値を返す関数は、単純に論理式の結果を返せば良いと思います。 static int isLeapYear(int year) { return year%400==0 || (year%4==0 && year%100!=0); } date2utで閏年判定をしているが、せっかく作ったisLeapYearが使われていません。 /*閏年かつ3月以降なら1日足す*/ if(year%400==0 || (year%4==0 && year%100!=0)) { if(month>=3)result+=SE...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: ウィンド右上の閉じるボタンについて
返信数: 3
閲覧数: 3707

Re: ウィンド右上の閉じるボタンについて

公式リファレンスには書かれていませんが、 SetWindowUserCloseEnableFlag GetWindowUserCloseFlag といった関数を使えば、実現できると思います。 参考までにコードを書いてみました。 #include "DxLib.h" int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { ChangeWindowMode(TRUE); if (DxLib_Init() != 0) return -1; SetDrawScreen(DX_SCREEN_BACK); // ユーザーが×ボタンを押しても自動的...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: メモリアクセスエラーをどうにかしたい。
返信数: 15
閲覧数: 6656

Re: メモリアクセスエラーをどうにかしたい。

csvのパラメータは1行あたり7個なので、Pointload.cppの57行目は
if(num==7){
となるべきではないでしょうか
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 再帰呼び出しについて
返信数: 8
閲覧数: 4146

Re: 再帰呼び出しについて

関数呼び出し毎に、リストを線形探索して対応する座標のマップチップを取得していますが、
マップチップのリストを

コード:

vector<vector<CMapTip *> > ListOfMapTip; // TipじゃなくてChip?
のように2次元配列で保持すれば、マップチップ自身が座標を保持しなくても、
ListOfMapTip[y][x]->XXXのように、添字で対応する座標のマップチップを取得できると思いますが、どうでしょうか。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: STLのsetに自作クラスを重複なく格納する
返信数: 5
閲覧数: 4175

Re: STLのsetに自作クラスを重複なく格納する

問題点は、beatleさんが指摘したとおりですが、 std::setが使う比較関数は、strict weak ordering(日本語だと厳密弱順序?)という性質を満たす必要があります。 【参考】 http://www.sgi.com/tech/stl/StrictWeakOrdering.html 修正案としては、 ・リンク先のInvariantsを満たすようにoperator<を適切に実装する ・pairに対して定義されているoperator<を使う ・ただ単に、typedef std::pair<int, int> Edgeとして使う などが考えられます。 以下実装例 class Edg...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: AOJ 5013 何度してもTime Limit Exceededになります
返信数: 2
閲覧数: 2737

Re: AOJ 5013 何度してもTime Limit Exceededになります

n, m は一度しか入力しないので、全体を while で囲む必要はありません。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 一筆書きパズルの正誤判定
返信数: 4
閲覧数: 2008

Re: 一筆書きパズルの正誤判定

2つの整数の組を使って辺を表現するというのはどうでしょうか。 頂点Xと頂点Yをつなぐ辺を(X, Y)と表すことにします。 これだけでは、(1, 3)と(3, 1)など同じ辺なのに違う表現が出てしまうので、、 ここでは、左側の数字のほうが小さくなるように定めることで重複をなくします。 fioさんが例示した星図形を取り上げると、 すべての辺のリストは、以下の5本の辺から成ります。 (1, 3) (1, 4) (2, 4) (2, 5) (3, 5) E を図形を表す全ての辺のリストとするとき、 XからYへの線が引けるかを判定するアルゴリズムは以下のようになります。 (1) Y < X なら、XとY...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: キャスト演算子をオーバーロードしたい
返信数: 5
閲覧数: 2870

Re: キャスト演算子をオーバーロードしたい

VC2008 Expressをインストールして試してみましたが、コンパイルエラーは出ませんでした。
(バージョン情報)
Microsoft Visual Studio 2008
Version 9.0.30729.1 SP

MoNoQLoREATORさんが使用しているVCのバージョンはいくつですか?
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: *でバッテン(×) を表示する
返信数: 12
閲覧数: 5707

Re: *でバッテン(×) を表示する

再帰呼び出しを使って、ループをなくしてみました。 #include <stdio.h> #define SPACE " " #define STAR "*" void print_parts(int n, const char *s) { if (n >= 1) { printf("%s", s); print_parts(n - 1, s); } } void print_line(int n, int i) { print_parts(i, SPACE); print_parts(1, STAR); print_parts(2 * (n - i) - 1, SPACE); print_pa...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: プログラミングの問題の書き方
返信数: 9
閲覧数: 4593

Re: プログラミングの問題の書き方

C++で書きました。 (言語かぶってしまった。いろんな言語での回答に期待) ソース(Visual C++ 2010 で作成) #include <iostream> #include <set> #include <utility> #include <algorithm> typedef std::pair<int, int> range; typedef std::set<range> range_set; void add(range_set &ranges, range r) { range_set::iterator it; // r ⊆ x なる x が存在する場合 // r は不...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: DrawStringToHandle関数について
返信数: 3
閲覧数: 2820

Re: DrawStringToHandle関数について

DrawFormatStringToHandleを使います。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C# 正規表現 大かっこ
返信数: 2
閲覧数: 2968

Re: C# 正規表現 大かっこ

[はエスケープする必要があります。

コード:

new Regex("aaa\\[(?<text>.*?)\\]", ...
もしくは

コード:

new Regex(@"aaa\[(?<text>.*?)\]", ...
としてはどうでしょうか。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: switch文内のgoto文について
返信数: 5
閲覧数: 3442

Re: switch文内のgoto文について

メインループの中でswitch文を使っている場合、breakだとswitch文のcaseの最後に記述するbreak文とかぶってしまい、swicthから抜けられないのですが何かgoto文の他にswicth文から抜ける方法はありますか? 一例ですが、こんなコードでどうでしょう。 enum STATE {TITLE, STAGE, END}; STATE state = TITLE; bool running = true; while (running) { switch (state) { case TITLE: // タイトル処理 if (ステージが選択された) { state = STAG...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 跳ね返りの処理について
返信数: 2
閲覧数: 1283

Re: 跳ね返りの処理について

以下のような処理でどうでしょうか。

上下の境界をオーバーしたとき、
angle = -angle;

左右の境界をオーバーしたとき、
angle = 180°- angle;
(ラジアンなら、angle = π - angle;)
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C++でエクスプローラを開いている時、そのパスを取得したい。
返信数: 7
閲覧数: 3732

Re: C++でエクスプローラを開いている時、そのパスを取得したい。

IShellWindowsに用意されているメソッドなどを直接呼び出さなかったのはなぜですか? もちろん、sw->get_Count(&count);のように直接呼んでもできます。 今回は、それ以降が、すべてIDispatchインターフェースを通した操作になっているので、統一してみたという程度のものです。(IShellWindowsはIDispatchを継承している) ところで、前述のInternetExplorerオブジェクトは、C++ではIWebBrowserインターフェースだと思われます。 http://msdn.microsoft.com/en-us/library/aa752127%...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C++でエクスプローラを開いている時、そのパスを取得したい。
返信数: 7
閲覧数: 3732

Re: C++でエクスプローラを開いている時、そのパスを取得したい。

色々調べながら書いて見ました。以下のページを参考にしています。 戻り値によるエラー判定はコードが読みにくくなるので、エラーハンドリングで例外を使うようにアレンジしています。 http://www.sol.dti.ne.jp/~yoshinor/ni/ni0003.html 私も完全に理解しているわけではないので、正しいかどうかは怪しいですが、コードの説明をすると、 はじめに、IShellWindowsのインスタンスを作成します。(これで、シェルが管理しているウインドウが得られる?) Countプロパティを取得し、ウインドウの数を得る。 Itemメソッドにより、InternetExplorerオ...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 一定フレームの間自動で移動する。ゲーム・クラスの設計方法
返信数: 7
閲覧数: 3301

Re: 一定フレームの間自動で移動する。ゲーム・クラスの設計方法

unique_ptrを使わないバージョンです。といっても全体の構成はほとんど変わりません。 違いは、Jiki::set_motionにnewしたオブジェクトを直接渡していることと、 unique_ptrが行なってくれていたポインタの所有権の管理を自分で行なっている点です。 #include <DxLib.h> #include <memory> // (x, y) の動きを制御するモーションクラス class Motion { public: Motion(bool moving = true) : m_moving(moving) // 初期状態を指定(最初からモーションが終了ということは少...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 離散フーリエ変換と高速フーリエ変換
返信数: 5
閲覧数: 7304

Re: 離散フーリエ変換と高速フーリエ変換

参照先のコードが間違っている可能性はないのでしょうか? たとえば、以下のページを参考にしてFFTを実装してみたところ、O(n 2 )のDFTとほぼ同じ結果が得られました。 http://www.kurims.kyoto-u.ac.jp/~ooura/fftman/ftmn1_2.html FFTのアルゴリズムと窓関数は、直接関係するわけではないので、必要になったら意識すればよいかと思います。 (暗黙のうちに方形窓を使っていることになります。) 私の実装を載せておきます。コードはC++によるものです。 上記参照ページの、再帰呼び出しによるFFTを参考にしています。 #include "main....
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: c++で弾幕風における”yield”の実現
返信数: 19
閲覧数: 12627

Re: c++で弾幕風における”yield”の実現

std::function(もしくは、boost::function)を使って、1フレームの処理をvectorとかに入れておいて、 updateで順番に呼び出せば、それっぽいことはできそうな気がする。(以下に示すコードは、sequential_coroutineがそれに相当する) さらに、指定回数の繰り返しとか、無限に繰り返すとかも作ってみたので、参考までにどうぞ #include <DxLib.h> #include <vector> #include <functional> //// // std::function<bool ()> をタスクとし、戻り値は、タスクが継続中かどうかを示す...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 特定のキーが押されるまで待つ
返信数: 5
閲覧数: 8918

Re: 特定のキーが押されるまで待つ

以下のような“状態遷移”を実現する必要があります。 [文字表示]   ↓ [入力待ち]   ↓ キーが押された   … []でくくった箇所がひとつの状態を表し、↓の横に書いてあるのが遷移の条件を表します。 何も書かれていない場合は、無条件で即座に遷移するものとします。 最も単純な方法は、switch-case文による分岐です。以下のサンプルプログラムを示します。 参考にしてみてください。 #include "DxLib.h" // 各フェイズを表す列挙体 enum Phase { INITIALIZING_PHASE, RUNNING_PHASE, WAITING_PHASE, UNKNOWN...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: クラスでの2次元配列の初期化ができない
返信数: 3
閲覧数: 6317

Re: クラスでの2次元配列の初期化ができない

クラスの配列メンバーは、宣言と同時に初期化することができないので、 以下のように、ローカル変数で値を設定した後、コピーするという方法が考えられます。 (C++の最新規格であるC++11では、initializer_listによる初期化が可能だが、Visual C++は現在未対応) CPlayer::CPlayer() { // ローカル変数で初期値を設定 int temp[12][20] = { {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 文の最後に”.”が付く
返信数: 2
閲覧数: 1205

Re: 文の最後に”.”が付く

コード:

DrawFormatString(0,200,GetColor(255,255,0),"メッセージ : %s\n", message[1] );
DrawStringやDrawFormatStringは改行文字は表示できないので、末尾の\nは不要です。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 一定フレームの間自動で移動する。ゲーム・クラスの設計方法
返信数: 7
閲覧数: 3301

Re: 一定フレームの間自動で移動する。ゲーム・クラスの設計方法

【サンプルコード】 #include "DxLib.h" #include <memory> // std::unique_ptr // (x, y) の動きを制御するモーションクラス class Motion { public: Motion(bool moving = true) : m_moving(moving) // 初期状態を指定(最初からモーションが終了ということは少ないと思うので、デフォルトではtrue) { } // 継承して使うので、デストラクタはvirtual virtual ~Motion() { } // モーションが継続中かどうか bool moving() con...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C++ 動的なオブジェクトの受け渡し
返信数: 4
閲覧数: 3208

Re: C++ 動的なオブジェクトの受け渡し

まず、提示されたコードにはたくさんの問題点があります。 動的に生成されるオブジェクトに名前をつけてコードを順に追ってみると、 int main(){ hoge *ho = new hoge(10); // H1を生成(内部でP1を生成) piyo *py = new piyo; // P2を生成 py = ho->GetPiyo(); // P2への参照が失われる。(もはやP2を削除することはできない→メモリリークの原因) py->putData(); ho->delPiyo(); // 内部でP1を削除 delete ho; // 内部でP1を削除したのち(→二重delete)、H1を削除 ...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: Stack around the variable 'fn' was corruptedというデバッグエラーがでます
返信数: 3
閲覧数: 19858

Re: Stack around the variable 'fn' was corruptedというデバッグエラーがで

h2so5さんの指摘した箇所とは別に、
nextChArr == 0 の状態で、207行目の処理が行われているため、範囲外アクセスが生じています。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: stringによる文字列の読み取り
返信数: 4
閲覧数: 1295

Re: stringによる文字列の読み取り

以下のコードでOKだと思います。

コード:

std::string a;
std::string b;
int n;

std::cin >> a >> b >> n;
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: boost::tupleとForeachとtemplate
返信数: 3
閲覧数: 1547

Re: boost::tupleとForeachとtemplate

template <typename T> void typedef_test1(){ typedef std::map<int, std::list<boost::tuple<T> > > data_map; typedef std::pair<int, std::list<boost::tuple<T> > > data_pair; typedef boost::tuple<T> data; data_map test_map; BOOST_FOREACH(const data_pair &pair, test_map){ BOOST_FOREACH(const data &val, p...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: AOJの問題0207「Block」が何回やってもランタイムエラーになってしまいます
返信数: 4
閲覧数: 3192

Re: AOJの問題0207「Block」が何回やってもランタイムエラーになってしまいます

再帰関数呼び出しが深くなりすぎて、スタックオーバーフローになっている可能性が考えられます。 (x , y ) -> (x+1, y ) -> (x+2, y ) -> … -> (x+1, y+1) -> … -> (x , y ) -> (x+1, y ) 上記のように、同じ場所を何度も探索しないように、 bool visited[105][105]; のようなフラグを用意しておき、 visited[y][x]がtrueとなったら、再帰呼び出しをしないようにしてみてはどうでしょうか? (visited[y][x]がfalseなら、trueに更新した後、再帰呼び出しを行う)
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: AOJの問題0207「Block」が何回やってもランタイムエラーになってしまいます
返信数: 4
閲覧数: 3192

Re: AOJの問題0207「Block」が何回やってもランタイムエラーになってしまいます

19行目

コード:

if(few[y-1][x]==c)  SAT(c,y+1,x,yg,xg,few);
                           ^
                          y-1 の間違いではありませんか?
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: メンバ関数ポインタへの代入
返信数: 6
閲覧数: 3454

Re: メンバ関数ポインタへの代入

個人的には、関数ポインタを経由してメンバ関数を呼び出す処理を、C_LaserObjに書いたほうがわかりやすいと思います。 #include <iostream> class C_LaserObj { double x, y, angle, speed; void (C_LaserObj::*LaserAct)(); public: void SetAction(void (C_LaserObj::*action)()) { LaserAct = action; } void DoAction() { (this->*LaserAct)(); } void HormingLaserAct() {...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: メンバ関数ポインタへの代入
返信数: 6
閲覧数: 3454

Re: メンバ関数ポインタへの代入

メンバ関数へのポインタは以下のように宣言します。

コード:

class C_LaserObj
{
public:
    /* メンバ関数へのポインタ */
    void (C_LaserObj::*LaserAct)();

    void HormingLaserAct();
};
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C++ STL vector演算子のオーバーロードについて
返信数: 5
閲覧数: 4005

Re: C++ STL vector演算子のオーバーロードについて

関数の後ろにつけるconstはメンバ関数につけるものですので、単なる関数につけることはできません。

以下のように、constメンバ関数では、thisがconstなオブジェクトへのポインタとなるので、メンバを書き換えることができなくなります。
ただの関数では、thisに相当するものがないので、そもそもconstを付ける意味がありません。

コード:

struct Hoge
{
	void hoge()
	{
		// thisの型は、"Hoge * const"
	}
	
	void hoge() const
	{
		// thisの型は、"const Hoge * const"
	}
};
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C++ STL vector演算子のオーバーロードについて
返信数: 5
閲覧数: 4005

Re: C++ STL vector演算子のオーバーロードについて

そのうまくいかないというコードを示してください。
あと、提示されたコードでは、other.size() < self.size()のときに範囲外アクセスになりますよ。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C++ STL mapに対するboost::assignのstatic_cast
返信数: 2
閲覧数: 1633

Re: C++ STL mapに対するboost::assignのstatic_cast

>static_cast<std::map<int, std::string> &> constが抜けていませんか?(static_cast< const std::map<int, std::string> &>) メンバをconstにした場合の話ですが、 std::mapのoperator[]は、constメンバ関数ではないので、 void hoge(const std::map<int, std::string> &m) { std::cout << m[1] << std::endl; // エラー:operator[]はconstメンバ関数ではない } のようなことはできません。 C...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 汎用出力関数(?)
返信数: 10
閲覧数: 3585

Re: 汎用出力関数(?)

特殊化にこだわらずとも、必要な分だけオーバーロードすれば良いのではないでしょうか #include <iostream> #include <vector> #include <list> #include <set> template <typename InIt> std::ostream & print(std::ostream &os, InIt first, InIt last) { os << "["; for ( ; first != last; ++first) { os << *first << ","; } os << "]"; return os; } template ...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: キャラクターの当たり判定について
返信数: 5
閲覧数: 1913

Re: キャラクターの当たり判定について

参照は以下の特徴を持っています。機能限定版のポインタとも言えます。
・間接演算子(*←これ)で参照はがしをする必要がない
・NULLにはなれない
・再代入ができない

したがって、参照自体を書き換える必要がなく、NULL(何も指していない状態)が不要ならば、参照を使えば良いです。

ほとんどの場合、参照で事足りると思うので、基本的に参照を使うようにしておき、
参照では実現できないケースのときのみ、ポインタを使うようにすれば良いと思います。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C++ 連結リストと派生クラスについて
返信数: 5
閲覧数: 2737

Re: C++ 連結リストと派生クラスについて

あるリストの要素の削除をイテレーターitを使ってする場合、~~list.erase(it)のようにすることで削除出来ますが、 お教えいただいたnewを使ってリストに要素をpush_back()をした場合、削除するときはやはり erase()を使わずに、deleteで消さなければならないのでしょうか? eraseすると、そのイテレータが指すポインタにはアクセスできなくなるわけですから、 ポインタをdeleteをした後に、その要素をeraseする必要があります。 list<EnemyData *> enemy_list; void MoveEnemies() { list<EnemyData *...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C++ 連結リストと派生クラスについて
返信数: 5
閲覧数: 2737

Re: C++ 連結リストと派生クラスについて

EnemyData* array[100]; これは、「EnemyData*」の配列ですよね。 同じように、「EnemyData*」のリストとしなければいけません。 したがって、 list<EnemyData*> enemy_list; とし、 Enemy1 new_enemy; enemy_list.push_back(&new_enemy); (*enemy_list.begin())->move(); もしくは、 enemy_list.push_back(new Enemy1()); (*enemy_list.begin())->move(); // new したものは delete ...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: キャラクターの当たり判定について
返信数: 5
閲覧数: 1913

Re: キャラクターの当たり判定について

オブジェクトを関数に渡して、状態を変更してもらうには、 ポインタもしくは参照を渡す必要があります。 メンバ関数の戻り値としてクラス外部にメンバー変数を公開する場合も、 受け取り先で、状態を変更す場合は、参照(or ポインタ)として返す必要があります。 最小限の修正としては、以下のようになるでしょうか。 //メイン Player player; EnemyManager enemyManager; HitManager hitManager; while (1) {   player.Update();   enemyManager.Update();   hitManager.CheckHit...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: プログラム実行中のウィンドウサイズの変更について
返信数: 2
閲覧数: 1648

Re: プログラム実行中のウィンドウサイズの変更について

フルスクリーンのウインドウモードの切り替えなら、
IDirect3DDevice9::Resetで新しいパラメータを設定してやればできたと思います。

コード:

LPDIRECT3DDEVICE9 device;
    ・
    ・
    ・
D3DPRESENT_PARAMETERS param;
/* paramをフルスクリーン用に設定 */
device->Reset(&param);
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 何故か、変数で構造体の配列数を指定すると、内容が表示されません
返信数: 25
閲覧数: 9333

Re: 何故か、変数で構造体の配列数を指定すると、内容が表示されません

51行目の

コード:

for(repetition=0;repetition < birth[0].quantity; repetition++);
{
・・・
}
for文の後ろのセミコロンが不要です。このせいで、中身が空のfor文+ただのブロックという意味になってしまっています。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 正弦波レーザーを作りたい
返信数: 5
閲覧数: 3233

Re: 正弦波レーザーを作りたい

サンプルを作ってみました。参考にどうぞ 方針としては、 レーザーをX軸方向に進むものとして計算しておき、実際に描画するときに回転後の座標を得るようにしています。 #define _USE_MATH_DEFINES // VCで、M_PIを使うため #include <DxLib.h> #include <math.h> // (x, y)を座標系の原点を中心に回転させる void RotateXY(double *x, double *y, double angle) { double x_ = *x; double y_ = *y; double cos_ = cos(angle); dou...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: strtok関数
返信数: 8
閲覧数: 3634

Re: strtok関数

コード:

while(tp != NULL)
{
	tp = strtok(NULL, ",");		// ここで、tpがNULLになると
	strcpy(str2[count++], tp);	// strcpyにNULLを渡すことになり、エラーとなる
}
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: decltypeを使ってのプログラミングについて
返信数: 3
閲覧数: 2600

Re: decltypeを使ってのプログラミングについて

書き忘れましたが、
新しい関数宣言構文(関数の戻り値の型を後置する記法)によって、戻り値の型を簡単に書けるようになるかもしれません。

コード:

// 戻り値の型は、a + b の結果の型
template <typename A, typename B>
auto tashizan(const A &a, const B &b) -> decltype(a + b)
{
	return a + b;
}
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: decltypeを使ってのプログラミングについて
返信数: 3
閲覧数: 2600

Re: decltypeを使ってのプログラミングについて

double d = v * u; の呼び出しにおいて、3つあるLinear::operator*のいずれにもマッチし、 例えば、3つ目のoperator*において、 NType1 = double NType2 = Linear::Vector<double> として、 RCMul<NType1, NType2>::typeをみると、 RHS(0) -> NType2(0) -> Linear::Vector<double>(0)というコンストラクタ呼び出しになり、 このような引数を取るコンストラクタが定義されていないために、エラーが出ているのだと思います。 一般的な解決方法はわかりません...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C++のSTLコンテナメンバ変数の初期化 (再び)
返信数: 2
閲覧数: 1377

Re: C++のSTLコンテナメンバ変数の初期化 (再び)

キャストがとんでもなく煩雑ですが、こんな感じでしょうか #include <vector> #include <iostream> #include <boost/assign.hpp> template <typename T> void print_vector(const std::vector<std::vector<T> > &v) { std::cout << "[" << v.size() << "]" << std::endl; for (int i = 0, N = v.size(); i < N; ++i) { std::cout << v[i][0] << std::en...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: C++のSTLコンテナメンバ変数の初期化
返信数: 3
閲覧数: 4987

Re: C++のSTLコンテナメンバ変数の初期化

boost::assignを使うなら、こうでしょうか #include <vector> #include <iostream> #include <boost/assign.hpp> template <typename T> void print_vector(const std::vector<T> &v) { std::cout << "[" << v.size() << "]" << std::endl; for (int i = 0, N = v.size(); i < N; ++i) { std::cout << v[i] << std::endl; } } class test...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: ライブラリとヘッダファイルに定義があるはずの関数がリンクの時にエラーになる
返信数: 2
閲覧数: 2314

Re: ライブラリとヘッダファイルに定義があるはずの関数がリンクの時にエラーになる

vlf.hには、
vlfGuiGameCentralMenuなる関数は宣言されていないようですが、vlfGuiCentralMenuの間違いではないのですか?
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 線形探索プログラム
返信数: 2
閲覧数: 1345

Re: 線形探索プログラム

ファイルから作ったリストを
list = LinkedListMake(argv[1]);
として、受け取る必要があると思います。

また、
LinkedListFree(list);
はLinkedListSearchの後で呼ばなければならないと思います。。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: free関数の解放について
返信数: 2
閲覧数: 2792

Re: free関数の解放について

freeの引数の&が不要です。
callocで返ってきた値をそのまま渡しましょう。

コード:

int *x = (int *)calloc(n, sizeof(int));
free(x);
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: Is it a Right Triangle? (AIZU ONLINE DUGE)の問題
返信数: 16
閲覧数: 6582

Re: Is it a Right Triangle? (AIZU ONLINE DUGE)の問題

データセット数Nの上限が明示されていないので、Nが大きい場合に、 Memory Limit : 32768 KBという条件に引っかかっているのでしょう。 (3,000,000×4byte×3で約35000KBになります。) ところで、このような入力データセットの場合、各行の入力に対して答えを出力すればいいので、 データセット分だけメモリを確保する必要はありません。 C言語で書くなら、以下のようなコードが雛形となるでしょう。 int main(void) { int i; int n; scanf("%d", &n); for (i = 0; i < n; i++) { /* 入力に必要な変数 ...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: サウンドのループ
返信数: 2
閲覧数: 1210

Re: サウンドのループ

PlaySoundMemの第3引数TopPositionFlagに、先頭から開始するかどうかの指定ができます。(リファレンスには書かれていませんが) デフォルトではTRUEになっているので、再開したい時に、このフラグをFALSEに指定することで、途中から再生ができます。 以下に、サンプルコードを示します。 キー入力をすると音楽を停止して、1秒後に再開します。 #include <DxLib.h> int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { ChangeWindowMode(TRUE); DxLib_Init(); int ...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 第10回 情報オリンピック 問題3
返信数: 6
閲覧数: 2472

Re: 第10回 情報オリンピック 問題3

nが大きな値、たとえば n = 900000000のとき、n * nを計算すると、int型の範囲ではオーバーフローしてしまうため、正しい値となりません。
これを回避するには、アルゴリズムを変更する必要があります。
n * n の配列をつくらずとも、タイルの色は計算できるはずですので、考えてみてください。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: memcpy関数について
返信数: 14
閲覧数: 25625

Re: memcpy関数について

boxさんのコードだと、キャッシュの影響で、後半のほうが早くなる気がします。 私も実験してみたところ、memcpyの方がやや速いという結果になりました。 ideone.comでの結果 - http://ideone.com/yK8do codepad.orgでの結果 - http://codepad.org/0hpCvEId #include <stdio.h> #include <string.h> #include <time.h> #define N 10000000 int main(void) { // memcpy { static int src[N], dst[N]; cloc...
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 吹き飛ばしについて
返信数: 4
閲覧数: 1797

Re: 吹き飛ばしについて

攻撃が命中したときに、(敵の速度)=(攻撃速度)×(適当な倍率)とするのはどうでしょうか。
もしくは、攻撃オブジェクトごとに、吹き飛ばし方向のベクトルを持たせるということも考えられます。
by a5ua
12年前
フォーラム: C言語何でも質問掲示板
トピック: 配列問題について
返信数: 6
閲覧数: 2086

Re: 配列問題について

穴埋め問題っぽくしてみました。これは、選択ソートと呼ばれるアルゴリズムです。考えてみてください。 int main(void) { int i, x; int data[5] = {8, 5, 12, 7, 9}; for (i = 0; i < 4; i++) { /* (1) data[i] ~ data[4] から最大値の位置xを探す */ x = my_max1(???, ???); /* (2) data[i] と data[i + x] の値を入れ替える*/ } for (i = 0; i < 5; i++) { printf("%3d", data[i]); } putchar(...

詳細検索ページへ移動する