検索結果 108 件

by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C言語での単語検索とカウントプログラム
返信数: 30
閲覧数: 5216

Re: C言語での単語検索とカウントプログラム

ここまで多数の返信をいただきながとても重要なことを書いていませんでした。講師は課題には学習した範囲までの内容しか使ってはいけないという人で、具体的に言うと、授業で使用される「新・明解C言語(柴田望洋)」の11章までの内容で作成しなければなりません。よって、rewind() やfgetなどのファイル系の関数、構造体などは使用できません。(以前まだ習っていないstrcmpを使用し評価を下げられました。現在は学習済みです。) 大変申し訳ありません・・・。 具体的に何を使用して良いかわからなかったので 授業で使用している書籍を調べましたが、該当書籍が3種類ありました。 新・明解C言語入門編 目次 h...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C言語での単語検索とカウントプログラム
返信数: 30
閲覧数: 5216

Re: C言語での単語検索とカウントプログラム

オフトピック
みけCAT さんが書きました: となっており、assignment-expressionとは一番「外側」(ASTで一番根に近い所)の演算子がコンマ演算子でない式のことなので、
いずれも定数でない式が要素数として使えることがわかります。
コマンドライン引数の数は、実行時にならないとわかりません。
それを最適化で定数にしてしまうようなコンパイラは欠陥品でしょう。
解説ありがとうございます。納得しました。
単純にVCが対応していないだけなんですね。
勉強になりました。
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C言語での単語検索とカウントプログラム
返信数: 30
閲覧数: 5216

Re: C言語での単語検索とカウントプログラム

ミスがあるかもしれませんが とりあえず、CとC++で動くものです。 追記:(以下のプログラム、英文を考慮していませんでした。ピリオドの対応してません。) 環境:VS2013/Windows10 // Cのつもり #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFF_MAX 128 // 標準入力から単語を取得する int GetWord(char* pText) { for (int idx = 0; idx < BUFF_MAX; ++idx) { char ch = getchar(); // 単語の...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C言語での単語検索とカウントプログラム
返信数: 30
閲覧数: 5216

Re: C言語での単語検索とカウントプログラム

SH さんが書きました:他にもおかしな点がありますが分かる方いたら教えていただきたいです。
実行結果に直接関係ないですが、気になったので・・・

以下のコードは、おそらく環境依存です。
配列の宣言に変数を使用していますが、定数として解釈されている様です。
SH さんが書きました:

コード:

int  word_cnt[argc - 1];
Clang 3.8 / LLVM 3.8 では、コンパイルできましたが、
Visual Studio 2013 のコンパイラでは、コンパイルエラーします。
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 二次元配列のポインタを他のソースファイルで書き換えたい
返信数: 13
閲覧数: 1554

Re: 二次元配列のポインタを他のソースファイルで書き換えたい

ポインタの付け替えで実現する場合は、以下の通りです。 となっており、a[0]への変更がbに反映されておらず、bへの変更がa[0]に反映されていません。 今回の検証ではGCCを使用しましたが、inemaruさんの指定するVS2013では正しく「ポインタの付け替え」が行われていますか? 【追記】 VC(2013かは不明)で検証 しましたが、同様にa[0]とbは独立しており、コピーが行われていると考えられます。 ご指摘ありがとうございます。 完全に自分の ミス でした。 VS2013で確認したところ、コピーが行われています。 付け替えは行われていません。 落ち着いて考えると、std::arrayの...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 二次元配列のポインタを他のソースファイルで書き換えたい
返信数: 13
閲覧数: 1554

Re: 二次元配列のポインタを他のソースファイルで書き換えたい

申し訳ありません。 質問斜め読みして、回答が的外れになってました。 (前の回答は、スポイラーテキストにしました。) ポインタの付け替えで実現する場合は、以下の通りです。 ↑ 間違いでした。このコードの動作は、 コピー です。ご注意ください。 // 環境:VS2013 #include <cstdio> #include <array> std::array<int, 5> b = { 11, 12, 13, 14, 15 }; void setPointer(std::array<std::array<int, 5>, 2>& refA) { refA[0] = b; } void outpu...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: DxLibでゲームの実行EXEとは別に設定EXEを用意したい
返信数: 15
閲覧数: 1791

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

設定ファイルを共有する実行ファイルがある状況について
注意したい点を一つ書くと、

フォーマットは、気を付けた方が良いかもしれません。

テキスト形式(txt, ini, xml, json等)であれば、問題は起こりにくいですが
バイナリ形式だと型の違いを意識してデータを読み書きする必要が出てきます。

windows環境であれば、バイトオーダー(エンディアン)までは気にする必要ないと思うので
別言語からバイナリを書き出す場合は、型の対応表を見ながらの対応になると思います。
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 全く訳の分からない例外がスローされてしまいました
返信数: 7
閲覧数: 991

Re: 全く訳の分からない例外がスローされてしまいました

エラー的に、「配列外アクセス」な気がしますが、
Visual Studioならウォッチ機能等を使用してデバッグするのが速いと思います。
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 二次元配列のポインタを他のソースファイルで書き換えたい
返信数: 13
閲覧数: 1554

Re: 二次元配列のポインタを他のソースファイルで書き換えたい

コピーで実現する場合のソース アンセーフ版(生配列を使用する場合) // 環境:VS2013 // Visual Studio だと必要かもしれん #define _SCL_SECURE_NO_WARNINGS #include <cstdio> #include <array> int b[] = { 11, 12, 13, 14, 15 }; void setPointer(int* pA) { // 配列bのサイズは5なので bの先頭アドレス+5で終端アドレス std::copy(b, b + 5, pA); } void output(){ printf("bのアドレス = %p\n"...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 二次元配列のポインタを他のソースファイルで書き換えたい
返信数: 13
閲覧数: 1554

Re: 二次元配列のポインタを他のソースファイルで書き換えたい

コピーで実現する場合のソース コピーで良いなら、std::copyを使えば安全 // 環境:VS2013 #include <cstdio> #include <array> std::array<int, 5> b = { 11, 12, 13, 14, 15 }; void setPointer(std::array<std::array<int, 5>, 2>& refA) { std::copy(b.begin(), b.end(), refA.front().begin()); } void output(){ printf("bのアドレス = %p\n", &b.front());...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C# 行数を表示したい。
返信数: 17
閲覧数: 1971

Re: C# 行数を表示したい。

Visual Studio以外にもC#のIDEはあるので、
(フォーラムルール的にも)開発環境は明記した方が良いでしょう。

UnityやMacの話だった場合、
MonoDevelopが使用されている可能性があるわけです。
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体の初期化
返信数: 5
閲覧数: 1001

Re: 構造体の初期化

初期化がゼロクリアで、C++であるなら、
自分は下記のようにしています。

コード:

MyStruct data = {};
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C++の勉強方法についての質問
返信数: 7
閲覧数: 1543

Re: C++の勉強方法についての質問

しかし、Direct3D等のサンプルにしても、古いC++の文法で書かれていることがほとんどです。 だから、Direct3DかつC++11のサンプルだけをやるというようにこだわると何もできなくなります。 まるで、C++11が別言語みたいな言われようですが、 新しいC++を知ったからと言って、古いC++が理解できなくなる訳じゃないです。 「何もできなくなる」というのは大げさな上に間違っています。 C++11はC++なのですから古いコードで書かれていても、 C++11のコンパイラでコンパイルできます。 ただ、技術を勉強するときに新しいものにこだわるのは少し問題があります。 例えばDirectXにつ...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: エラーができて実行ができないプログラム
返信数: 8
閲覧数: 1026

Re: エラーができて実行ができないプログラム

後はライブラリリンクだけできればよかったのに、 なぜCLAPACKに変更したのでしょうか? CLAPACKは使用経験がないので、自分では分かりかねます。 とりあえず、エラーについて 予想 で答えます。 error C2733: 'zgesv_' : オーバーロードされた関数の C リンケージの 2 回以上の宣言は許されません。 CLAPACK側に同名(zgesv_)の定義があるため、エラーしていると予想。 realがあいまい Complex から real に変換できません どこかに定義されたreal関数とstd::real関数が名前衝突したと予想。 提示されたコードで怪しいと思った点を修正し...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: エラーができて実行ができないプログラム
返信数: 8
閲覧数: 1026

Re: エラーができて実行ができないプログラム

そのエラーは、「関数zgesv_の実体がない」というエラーだと思われますが Lapackライブラリのリンクが、できていないのでは? extern "C" { // Lapackライブラリの関数呼び出し用の定義 void zgesv_ ( const int& N, const int& NRHS, Complex** A, const int& LDA, int* IPIV, Complex** B, const int& LDB, int& INFO ); }; もし自前で実装するのであれば、(本末転倒) extern "C" { void zgesv_ ( const int& N, co...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: エラーができて実行ができないプログラム
返信数: 8
閲覧数: 1026

Re: エラーができて実行ができないプログラム

エラーを見る限り58行目で、テンプレート引数を解決できてないだけっぽい
以下のコードで、解決しませんか?

コード:

  // info = zgesv( A, x, b );
  info = zgesv<N>( A, x, b );
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C++の勉強方法についての質問
返信数: 7
閲覧数: 1543

Re: C++の勉強方法についての質問

5. DirectXプログラミングをやりたい場合は、まずC++でDLLを読み込む方法と  COMプログラミングができないと無理だった気がする(私より詳しい人頼みます) 個人的な所感です。 C++で(基本的な)処理を書く上では、自前でDLLを読み込んだりはしません。 (VSやDirectXの実装側でやってくれている為) また、COMプログラミングに関して詳しく知っていなくても 関数の意味や3Dに関する知識があれば、普通にC++(よりC言語寄りだけども)が使える程度で どうにかなりそうだと思います。 (専用の関数を使用するため、COMプログラミングを感じさせない作りになっている) [hr] 以下...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C言語、構造体について
返信数: 6
閲覧数: 1457

Re: C言語、構造体について

かずま さんが書きました:

コード:

#include <stdio.h>  // 関数 printf の宣言を取り込む (定義は入っていない)
inemaru さんが書きました:

コード:

#include <stdio.h> // (関数printfの定義が入っているファイルを読み込む)
かずま様の説明と自分の説明に差があったので補足です。

確かにヘッダーには、宣言しか入っていませんが、
最終的に、定義(実装)の入っているファイルが読み込まれるようになるので
<stdio.h>には、定義が入っていないという意味です。
(printfの実装は組み込まれていることが多いですが・・・)
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 分割してよみこんだ画像(4方向に動かす)の透過ができません
返信数: 4
閲覧数: 785

Re: 分割してよみこんだ画像(4方向に動かす)の透過ができません

つまり、 「透過画像の透過部分が透過されていない」 ということでしょうか?

もしそうだとしたら、
  • 全体のコード(もしくは再現コード)
  • 使用している画像の詳細等(問題なければ)
  • DXライブラリのバージョン
  • 開発環境
程度は、提示した方がよさそうです。

最低限必要な情報が欠損した状態の質問には答えられないことが多いので
フォーラムルールの質問テンプレートの使用をお勧めします
http://dixq.net/board/board.html
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C言語、構造体について
返信数: 6
閲覧数: 1457

Re: C言語、構造体について

インスタンスという用語をそのソースで使うのがふさわしいのかどうか、 いささか疑問に思います。 単に「変数を定義する」くらいでいいような気がしなくもありません。 意味的には、間違っていないつもりですが、 C言語は、C++と違ってオブジェクト指向を導入していないので、 用語としては、スタンダードではないかもしれません。 (C++の構造体はクラスと同等なので、明確に区別していない限りインスタンスと呼んでも問題ない) 解説サイトで調べたところ、聞きなれないですが、 構造体のインスタンス = オブジェクト と呼ぶらしいです。 詳細は、ロベールさんの解説に丸投げします。 ・メモリ上にある変数を実体(イン...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C言語、構造体について
返信数: 6
閲覧数: 1457

Re: C言語、構造体について

ソースが何をやっているのか?という質問であれば、こんな感じでどうでしょうか? (用語の意味が不明瞭な場合は、検索してください) #include <stdio.h> // (関数printfの定義が入っているファイルを読み込む) // 座標X,Yを持った構造体 point の定義 typedef struct point { double cx; // 座標X double cy; // 座標Y } point; // 構造体を引数で初期化してインスタンスを返却する関数 point set_point(double x, double y) { point pt; pt.cx = x; pt....
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: TEを引数にして、JUDGEを返す
返信数: 13
閲覧数: 1454

Re: TEを引数にして、JUDGEを返す

あれ、さっきとコメント表示が違う・・・。 いえ、まだ勉強途中なので関数、引数、戻り値に関してもあまりよく理解していません。 編集と返信が入れ違いになってしまったようです。 (レスの内容にキーワードを書き加えてました。) とりあえず、検索すれば解説サイトがあるので活用してください。 最低限、「関数」について理解していないと、この課題は解けません。 以下は、関数についての参考までに // 関数を使うと // 共通化できる部分をまとめたり // 処理を分割したりできる // 戻り値のない関数 void Proc1(){ printf("Proc1"); } // 戻り値のある関数 int Proc...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: TEを引数にして、JUDGEを返す
返信数: 13
閲覧数: 1454

Re: TEを引数にして、JUDGEを返す

このプログラムができてすぐ、勝敗部分等に関数を使い、TEを引数にしてJUDGEを返す関数を作ってもらいたいと課題を頂きました。 今回教えて頂きたいのは、この<<関数を使い、TEを引数にしてJUDGEを返す関数を作ってもらいたい>というところです。 正直言って、ちょっと言っている意味がわからなかったのですが、 同じ処理を何度も書かないためにする必要があるものなのかなと思っています。 関数などのサイトや、本などを見てやっていますがいまいちどうしていいかわかりません。 漠然とした質問ですが、一体TEを引数にしてJUDGEを返すとはどういうことなのでしょうか。 単純に、<<じゃんけんの結果を返す関数...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: visual stdio エラーについて困ってます
返信数: 2
閲覧数: 554

Re: visual stdio エラーについて困ってます

プロジェクトのプロパティから
[構成プロパティ]→[C/C++]→[プリコンパイル済みヘッダー]
の[プリコンパイル済みヘッダー]が[使用]とか[作成]にもしなってたら
[プリコンパイル済みヘッダーを使用しない]に変更すると治るかもしれない

画像のみで判断なので、あまり期待しないでください。
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: [C#]先に値型の変数を返して、後から参照でその値を変更したい
返信数: 6
閲覧数: 994

Re: [C#]先に値型の変数を返して、後から参照でその値を変更したい

C#詳しくないですが、
少なくとも、どこかに result の参照を退避させないと
result にアクセスする事すらできないので変更とか無理なんじゃ・・・
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: インスタンス名.メソッド名().メソッド名()の記述の仕方
返信数: 2
閲覧数: 497

Re: インスタンス名.メソッド名().メソッド名()の記述の仕方

記述式の名称は、知りませんが 戻しているのは、「参照(参照渡し)」じゃないですか? https://www.google.com/search?&q=C%2B%2B+%E5%8F%82%E7%85%A7%E6%B8%A1%E3%81%97 #include <iostream> struct Hoge final { Hoge& MethodA(){ std::cout << "A" << std::endl; return (*this); } Hoge& MethodB(){ std::cout << "B" << std::endl; return (*this); } }; int m...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C++でシーンが変更できない
返信数: 2
閲覧数: 958

Re: C++でシーンが変更できない

軽くみた感じ、 Sceneを継承したTopで呼んでるSceneChangeのミスに見えた void Top::Update(){ if(CheckHitKey(KEY_INPUT_Z)==1){ SceneChange(Scene_Menu); // ↑ これは this->SceneChange(Scene_Menu); を呼んでるけど //  実装が空だから何も起きない // 本当は、コンストラクタで受け取ってる changer を使って //  changer->SceneChange(Scene_Menu); にしたかった? } } 以下のスポイラーは似たような感じに動くように、コード...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: ファイルに書かれた式の計算について
返信数: 12
閲覧数: 2756

Re: ファイルに書かれた式の計算について

課題の目的だけを達成するなら、 解析処理すら必要ない気がしたので書いてみました。 シェルに丸投げする方法です。 もちろん環境依存です。 Windows10・VS2013 環境で確認しました。 (パフォーマンスチューニングはしていません。) #include <iostream> // io #include <cstdlib> // system #include <fstream> // ifstream #include <vector> // vector #include <string> // string // テキスト型 typedef std::vector<std::stri...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 引数の違う親クラスの関数が使えなくなる
返信数: 6
閲覧数: 977

Re: 引数の違う親クラスの関数が使えなくなる

(using宣言以外の方法では、)型を明示すれば呼び出せます。

コード:

class Base {
public:
	int func(int a) {
		return a + 1;
	}
};

class Myclass : public Base {
public:
	int func(int a, int b) {
		return a + b;
	}
};

int main()
{
	Myclass a;
	//a.func(1); //エラー
	a.Base::func(1);
	return 0;
}
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: c++の命名規則について
返信数: 8
閲覧数: 1573

Re: c++の命名規則について

標準ライブラリの命名規則に関しては、
イマイチはっきりした情報が見つけられない(不確かな情報)なので、
あまり信用しないで
一意見として受け取ってください。

少し調べてみたところ、C++標準委員会とかで議論されてはいるみたいですが
  • ローカル変数と型名の衝突の回避
  • テンプレート引数名をテンプレートクラス内でusing宣言する事が多い為、名前衝突が起こりうる
くらいのことしかわかりませんでした。

誤解釈とかもありうるので、
間違ってたらすいません。
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 2つのヘッダに同名の構造体とクラスが…
返信数: 1
閲覧数: 516

Re: 2つのヘッダに同名の構造体とクラスが…

自分は、「Kinect」と「Oculus Rift」のどちらのSDKも使用したことが無いので 「別々のファイルにある定義が衝突するが、定義を書き換えず呼び出し元で解決したい」 と解釈して回答します、ご了承ください。 定義そのものを、名前空間に閉じ込める方法で とりあえずの解決は、できると思います。 以下、参考コードです namespace Kinect { #include "Nuisensor.h" } namespace Oculus { #include "OVR_Math.h" } int main() { // 使用するときは、スコープを使って区別する Kinect::Vector4...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 図を挿入したい
返信数: 2
閲覧数: 508

Re: 図を挿入したい

図とかファイルをエディタ上に表示する方法は知らないので、 (内容を確認できるようにする程度であれば)使えそうな方法を書いてみます。 Visual Studioのエディタはデフォルトでハイパーリンクに対応しています。 以下の方法はどうでしょうか。 「構文図やフローチャート、表など」は、任意の製図ソフト等で作成する 作成した図は、画像として保存する コード中で、図を確認するために 作成した画像のパスをコメントに書く パイパーリンクとして認識されるようにファイルパスをコメントで書いておくことで 確認したいタイミングで[Ctrl+クリック]でタブが開いて確認できると思います。 int main(voi...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 学校の課題なんですが、どうしてもわからないんです。誰か教えてください!
返信数: 5
閲覧数: 912

Re: 学校の課題なんですが、どうしてもわからないんです。誰か教えてください!

とりあえず、タイピングミスじゃなさそうな部分で問題になりそうな点を上げてみます。 変数 min が比較に使用しているのに初期化されていない sum / s の部分は、整数で計算されてしまう 0除算が発生する(変数 s を平均計算前にデクリメントしている為) [hr] 以下、修正したコードです。 できるだけ、元ソースを意識して簡単にしてあります。 (開発環境が明記されていないので、環境によっては動かないかもしれないです。) #if _MSC_VER #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <climits> #else...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: c++の命名規則について
返信数: 8
閲覧数: 1573

Re: c++の命名規則について

自分が普段使っている命名ルールは、「Google C++スタイルガイド」です。 https://google.github.io/styleguide/cppguide.html 公式ページは英語ですが、検索すると有志の方が日本語に翻訳したものが見つかると思います。 「Google C++スタイルガイド」で、クラス名(型名)は、 大文字で始めて、単語の頭文字を大文字にして、アンダーバーを使わないようにする。 となっているので、パスカル記法を使っています。 個人的に可読性は良いと感じています。 標準ライブラリの命名規則について未確認かつ不確かな情報ですが、 「C++標準ライブラリは、既存のライブ...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: ライブラリについて
返信数: 6
閲覧数: 1455

Re: ライブラリについて

C言語でなくて、C++を使用していますが、 論点はそこになさそうなので、回答してみます。 [hr] 前提として、 現場で働いている人は、成果物を提出する事が仕事です。 つまり、 納期までに成果物が完成することが必須条件で、 個人の技量や知識は二の次です。 それを踏まえて、 ライブラリの件について書くと 品質 開発効率 人件費 を両立させるために、 標準か外製かなんて関係なく普通に使用されてます。 使用するための条件はありますが、 大体はライブラリのライセンス絡みです。 (ライセンスによっては、製品をオープンソースにしないといけなくなったりする為) 特に、例に挙げられているような、 グラフィック...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 同一アドレスが、異なる値を指している?
返信数: 2
閲覧数: 779

Re: 同一アドレスが、異なる値を指している?

返答ありがとうございます。
挙動について、納得できました。

今回の状況は、
dataの初期化値が定数になっていることが、原因だったようです。

逆に、dataの初期化値を変数にすると
アドレスから値を取得するので、
const変数でも書き換えできてしまうことがわかりました。

コード:

// 元になるconst変数
const int data = rand();
また、アセンブリで実際の動作を確認することを覚えました。

特に、Compiler Explorer に関して良Webツールを
知ることができて良かったです。

ありがとうございました。
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 同一アドレスが、異なる値を指している?
返信数: 2
閲覧数: 779

同一アドレスが、異なる値を指している?

お世話になります。 C++における、const変数の挙動について解せない事があったので質問しました。 アドレスの値を変数に格納後、 格納した変数を使用してアドレスの指す変数を書き換えるといった方法で const なデータの書き換えを行った際、 同一のアドレスが指す内容が変化する動作についてです。 プログラム中で、変数がどのようになっているのか分からず困っています。 書き換えられたデータは、どのように元の数値を保っているのでしょうか? (ソースコード中では、dataが書き換え後も120として扱われている挙動) constなデータの書き換えが目的ではないので、 const装飾子は、本来書き換えられ...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 抽象クラス1の子クラス抽象クラス2の子クラスの関数
返信数: 10
閲覧数: 1075

Re: 抽象クラス1の子クラス抽象クラス2の子クラスの関数

ゲームプログラミングにおいては、 共通で扱える関数があるものを抽象化するのが効率的です。 特に、パフォーマンス的な観点からdynamic_castを行うようなことは避けるべきです。 ツール開発や、データ解析において Object型(共通型)に格納後、ダウンキャスト(dynamic_cast)する手法は使用されるので (シリアライズ/デシリアライズ、データパーサーでは使用される) あくまでも、ゲーム開発では避けるべきといった意味です。 なので、今回の場合は、 更新処理といった、 ゲームオブジェクトに共通する基底クラスを作るのが良いと思います。 ・初期化 ・終了処理 ・計算 ・更新 は、ゲームオブ...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 抽象クラス1の子クラス抽象クラス2の子クラスの関数
返信数: 10
閲覧数: 1075

Re: 抽象クラス1の子クラス抽象クラス2の子クラスの関数

「何をしようとしてそのような実装にするのか」は 今回は気にせずに回答しています。 (Any型やObject型の類でオブジェクト指向としては破綻していない為) 目的によって、それが適した方法なのかという論点では hideさんの言う通りで、完全に外視状態です。 なので、 以下に、考え方を書きます。 「物」を継承した「生き物」 「生き物」を継承した「人」 「物」は「人」か? と考えたとき、 「物」:One 「生き物」:Two 「人」:Three でマップできる気がします。 「物」にない機能を「人」が持っている状況で 「物」を使って「人」の機能を使用することを許可するのか? 許可するのであれば、 ・何...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 抽象クラス1の子クラス抽象クラス2の子クラスの関数
返信数: 10
閲覧数: 1075

Re: 抽象クラス1の子クラス抽象クラス2の子クラスの関数

こんな感じでどうですか? ThreeをOneに代入するには OneにBを呼び出すための定義が必要です。 コンパイルエラーする場合は、override キーワードを削除してください ・抽象クラスを使用する場合 #include <iostream> struct One { virtual ~One(){}; virtual void A(){}; virtual void B(){}; // 定義が必要 }; struct Two : public One { virtual void B() override { std::cout << "Two::B" << std::endl; } }...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: Visual C++ 2008 → Visual Studio Community 2015
返信数: 2
閲覧数: 903

Re: Visual C++ 2008 → Visual Studio Community 2015

まず、質問で違和感を感じた部分を書きます。 設計をする上でVisual C++ にはなくてVS2015にある機能などはありますでしょうか?またその機能は便利(重要)でしょうか? ”Visual C++ にはなくてVS2015にある機能”というのは質問の本意と異なっているのではないでしょうか。 Visual Studio 2015 で使用される C++ の開発環境は、Visual C++ です。 まず前提として、Visual Studio は統合開発環境です。 Visual Studio の中に各プログラム言語で開発するためのツールセットがあり そのうち C++言語 を開発するためのツールセット...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 添削お願いいたします
返信数: 7
閲覧数: 1780

Re: 添削お願いいたします

静的配列(インスタンス)の引数付きのコンストラクタの呼び方が分からなかったのと、 C++11の基礎サンプルに、 静的配列の初期化で引数付きのコンストラクタを呼び出す方法を織り交ぜました。 VS2015を使用するのであれば、知っておいた方が良いかと思いサンプルを作ってみました。 C++11のコードがコンパイルできる環境でコンパイルしてください。 // C++11 サンプル #include <iostream> #include <array> // 基底クラス struct BaseObject { // コンストラクタ BaseObject(){} // デストラクタ virtual ~B...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 添削お願いいたします
返信数: 7
閲覧数: 1780

Re: 添削お願いいたします

DrawTitle.cppは不要と判断しました。

ソースコードのやりとりを考慮して、
開発環境の情報を書いた方が良いと思います。

一応共有の情報として
 文字セット :マルチ バイト
 IDE :VisualStudio 2013
の環境でビルドできました。

失礼しました、プロジェクトデータが含まれていたので判断できますね。

軽くチェックしましたが”メモリリークしています”
メモリリークするプログラムは、PCのメモリを圧迫するので注意した方が良いです。
new など動的に確保したメモリの開放を忘れていませんか?
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 引数を定数に
返信数: 8
閲覧数: 1089

Re: 引数を定数に

Borland C++ 5.5.1(BCCDevoperのコンパイラ)は 結構古いので2000年以降に制定された規約は判断できないみたいです。 前回貼ったコードは、 C++11(2011年に標準化)に対応しているコンパイラが必須ですので コンパイルエラーするのはコンパイラの問題です。 同じ環境を再現するのが、手間だったので とりあえず、古い規約を調べつつサンプルコードを 書き換えてみました。 STL自体がC++で実装されているので 以下のコードは、古い規約で書いたC言語風C++コードです。 コンパイル可能か確認できてないので、 動けばラッキーくらいの気分でお願いします。 // main.cpp...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 引数を定数に
返信数: 8
閲覧数: 1089

Re: 引数を定数に

C++(C++11)ですが、実装例です。 あまり綺麗に書けていませんがご了承ください。 Windows10 VS2013(マルチバイト文字)環境で作成しました。 標準ライブラリSTL(std)のvectorとstringを使用すれば 割と楽に解決できると思われます。 開発環境が違うのでコピペで動かない可能性あります。 #include "DxLib.h" #include <iostream> #include <vector> #include <string> // DXライブラリ簡易ラップクラス class DxLibApp final { public: // コンストラクタ DxLi...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C++仮想関数のコンパイルエラー
返信数: 4
閲覧数: 1162

Re: C++仮想関数のコンパイルエラー

前提知識が間違っている可能性があるので2点確認です。 ・継承の種類について(現在のコードでprivate継承しているのは意図的なのか) ・virtual関数はオーバーライドするために必要 この前提が間違っていると回答ができません。 以下、すべてこちらの予想で回答するので 質問内容とずれた回答をするかもしれません。 ご了承ください。 【private継承が意図的だった場合の回答】 private継承したスーパークラスのメソッドを 継承先でpublicとして公開するにはオーバーライドが必須になります。 アクセス装飾子を変更するためにプロトタイプ宣言が必須になるので、 実装を書く必要があります。 #...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: C++の高速Getter?を継承関係のあるクラスでも使いたい
返信数: 2
閲覧数: 1022

Re: C++の高速Getter?を継承関係のあるクラスでも使いたい

アクセサを作るくらいしか無いとした理由は質問内容を条件を含めて 同じデータを指す[value]と[read]をそれぞれ使用するクラスでprotectedとpublicにしたい と解釈したためです。 分かりづらい質問文でしたが、 非常に適切な解釈をしていただき助かりました。 (正直、2週間ほど回答が無かったので、質問を消してもらって他の質問サイトに投稿しようかと思っていました。) 回答していただいた通り、C++では不可能なようです。 一応、自前で無理やり解決させたコードがあるので載せておきます。 キャストする方法なので安全面で不安がありました。 // 高速Getter?テンプレートクラス te...
by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: クラスの宣言に代入演算子
返信数: 2
閲覧数: 499

Re: クラスの宣言に代入演算子

少なくとも、上記のコードはC++の標準構文でないので
VC++(VS2013)とclang3.6ではコンパイルできません。

パッと見、ヘルプの誤植だと思うので、

コード:

class Derived : public Base {
 Derived():Base(1) {}
}
と書いて継承を表現したかっただけだと思われます。

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