検索結果 108 件

by inemaru
3年前
フォーラム: C言語何でも質問掲示板
トピック: 2つのヘッダに同名の構造体とクラスが…
返信数: 1
閲覧数: 484

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
閲覧数: 459

Re: 図を挿入したい

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

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
閲覧数: 1427

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

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

Re: ライブラリについて

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

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

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

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

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

コード:

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

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

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

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

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

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

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

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

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

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
閲覧数: 880

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
閲覧数: 1655

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

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

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

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

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

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

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

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

Re: 引数を定数に

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

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
閲覧数: 988

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

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

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

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

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

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

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

コード:

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

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