質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

4回答

1918閲覧

ヘッダファイルなしでコンパイルしたい。

carnage0216

総合スコア194

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/04/13 02:29

編集2022/01/12 10:55

環境
Windows10 64bit
vs2015(開発用コマンドプロンプトのみ)
OpenCV-MinGW-Buildhttps

このサイトhttp://d.hatena.ne.jp/Inuneco/20110714/p1に書いてあるopencvのプログラムをヘッダファイルなしで書き直したいのですが、どのようにすればよいでしょうか?

#include <cv.h> #include <highgui.h> int main () { cvNamedWindow ("test", CV_WINDOW_AUTOSIZE); cvWaitKey (0); cvDestroyWindow ("test"); return 0; }

私個人で書いたものはこちらです。
できる限りopencvの参考書とc言語の参考書で頑張ったのですが最後のエラーが解決できずにいます。

#define cvNamedWindow; int cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) ); CV_WINDOW_AUTOSIZE = 0x00000001;//the user cannot resize the window, the size is constrainted by the image displayed int main () { cvNamedWindow ("test", CV_WINDOW_AUTOSIZE); cvWaitKey (0); cvDestroyWindow ("test"); return 0; }

エラーがこちらです。

C:\Users\Daito\Desktop\NamedWindow.c:3:22: warning: ISO C99 requires whitespace after the macro name #define cvNamedWindow; ^ C:\Users\Daito\Desktop\NamedWindow.c:4:1: warning: useless type name in empty declaration int cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) ); ^~~ C:\Users\Daito\Desktop\NamedWindow.c:4:20: error: expected identifier or '(' before 'const' int cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) ); ^~~~~ C:\Users\Daito\Desktop\NamedWindow.c:5:1: warning: data definition has no type or storage class CV_WINDOW_AUTOSIZE = 0x00000001;//the user cannot resize the window, the size is constrainted by the image displayed ^~~~~~~~~~~~~~~~~~ C:\Users\Daito\Desktop\NamedWindow.c:5:1: warning: type defaults to 'int' in declaration of 'CV_WINDOW_AUTOSIZE' [-Wimplicit-int] C:\Users\Daito\Desktop\NamedWindow.c: In function 'main': C:\Users\Daito\Desktop\NamedWindow.c:11:1: warning: implicit declaration of function 'cvWaitKey' [-Wimplicit-function-declaration] cvWaitKey (0); ^~~~~~~~~ C:\Users\Daito\Desktop\NamedWindow.c:13:1: warning: implicit declaration of function 'cvDestroyWindow' [-Wimplicit-function-declaration] cvDestroyWindow ("test"); ^~~~~~~~~~~~~~~

どうかよろしくお願いいたします。

ヘッダファイルなしのプログラムにこだわるのはヘッダファイル 自体に無駄が多いため、ソースコードとは関係ないものでエラーを出すためです。cc~~~~

出来れば解決までの過程なども教えていただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ヘッダファイルなしのプログラムにこだわるのはヘッダファイル 自体に無駄が多いため、ソースコードとは関係ないものでエラーを出すためです。c~~~~

自身の不理解を棚に上げてエラーが出るのはヘッダーのせいだなどと批判するのは、OpenCVの作者に対して失礼というものです。作者に対する敬意が微塵も感じられません。

エラーが出るのは使い方が間違っているからです。

OpenCVを満足に使えるようになるまでは、無理に自分でビルドしようとせずに、まずはビルド済みのパッケージを利用し、ドキュメントをしっかりと読み込むことをお勧めします。

投稿2018/04/13 04:32

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/04/13 05:03

自分では全く無礼だと感じずに質問していました。 毎度毎度謝るばかりです。 大変無礼な事をしました。 本当に申し訳ありません。
episteme

2018/04/13 05:28

やるのは構わん、けど恒久的な対処にはなり得ない。 なので、うまくいったら次どうすんだ? に興味があります。
catsforepaw

2018/04/13 09:32

> うまくいったら次どうすんだ? に興味があります。 確かにそれはそれで興味深いところではありますが、うまくいくまでには、さらに幾度となく質問が繰り返されるだろうことは想像に難くないわけで……。
carnage0216

2018/04/13 11:56

遅くなり申し訳ありません。 うまくいったら、opencvや誰かの作った関数を標準関数のみで置き換えてどのように標準関数で組んだのかなどを分析したいと思っています。そこらか標準関数を用いて自分だけの関数やOpencvを改造したいと考えています。 それに意味があると私は思っています。
episteme

2018/04/13 12:16 編集

1.あちこちから探してきたコードをとっかえひっかえしては動かねー動かねーと質問を繰り返すのはナゼ? 2.ヘッダ#includeしてたら不可能なことなの? それはナゼ?
catsforepaw

2018/04/13 13:22 編集

> それに意味があると私は思っています。 意味を見いだすことは素晴らしいことです。頑張ってください。 ただし、ライブラリー提供者の想定外の使い方をする場合は完全に自己責任です。それによって起こり得る問題はすべて自力で解決しなくてはいけません。うまくいかないからといって質問をしたところで満足のいく回答は期待できないでしょう。 なぜなら、OpenCV利用者、特に自在に使いこなせる程の上級者は、提供されているクラスや関数などを駆使して期待通りの結果を得ることに意味を見いだし、そのためにはどうすれば良いかを知っているからです。
carnage0216

2018/04/13 13:29

1、自分でも試行錯誤しているのですができなかった場合とできた場合で自分よりも良い方法で解決しているのではないかと考えると質問してしまいます。頼りすぎはよくないのはわかっています。悪い癖です。 2、プログラム上の関数がどのように定義されているかはヘッダファイルに書いてありますが、より関数を理解するためにヘッダファイルに書いてある定義をプログラムの関数に直接書き込むことをしていました。結果としてヘッダファイルがなくても良いのではないかと間違った考えに至りました。
episteme

2018/04/13 13:36

1. 異なるサンプルで同様の質問を繰り返すのはなぜ? 2. ヘッダに書かれているのは定義じゃない。宣言だ。それは関数の使い方であって、その実装ではないことはわかってるよね? で、それを直接書き下すことが「より関数を理解する」ことになるのはナゼ? 申し訳ないが、理解不能なのですわ。
carnage0216

2018/04/13 15:56

えーと、その、うまく説明できないのですが、一つの問題を考えると複数の問題が発生するのです。 簡単にいうと例えばC言語プログラムを勉強するはずが掘り下げすぎてアセンブリ言語やAPIなどの勉強になっていたり、最初の目的と違うことがしばしあり困ることがあります。 2においての間違い、申し訳ありません。直書きするというか、その関数に必要な宣言を書くことでその関数がどんなことをする関数で何が必要で…などと関数に関する理解が深まるのです。自分はこの方が勉強しやすいと思いました。 なので、他の方からしたらなんでそんなことをしているのだろうと思われても仕方ないと考えています。といいつつもこちらで質問している以上は皆様のわかるように説明しなければなりません。
episteme

2018/04/13 22:21

> その関数に必要な宣言を書くことでその関数がどんなことをする関数で何が必要で…などと関数に関する理解が深まるのです。 Visual Studio なら関数にポインタ重ねるだけでプロトタイプ宣言を見せてくれる。 繰り返すが、なぜにgccにこだわる? gccじゃできないことがあるのか?
episteme

2018/04/13 22:32

あと、プロトタイプを直書きする方法はC++だといずれ絶対に破綻する。
carnage0216

2018/04/14 00:35

>>Visual Studio なら関数にポインタ重ねるだけでプロトタイプ宣言を見せてくれる。 忘れていました。 >>なぜにgccにこだわる? gccじゃできないことがあるのか? そんな事はございません。単純にコマンドプロンプトから実行できれば良くなってきたためgccとvsの開発用のコマンドプロンプトを使っています。もちろん両方同時には使いません。 >>プロトタイプを直書きする方法はC++だといずれ絶対に破綻する。 全く知りませんでした。 なぜでしょうか?融通が利かないためですか?
episteme

2018/04/14 01:12 編集

ヘッダの展開をやってりゃそのうち気づくだろうよ。 # てかそろそろ気づいてほしい
catsforepaw

2018/04/14 02:36

> 直書きするというか、その関数に必要な宣言を書くことでその関数がどんなことをする関数で何が必要で…などと関数に関する理解が深まるのです。自分はこの方が勉強しやすいと思いました。 で、その方法で勉強して何を習得できましたか? cvNamedWindowに関する理解は深まりましたか? その関数が何をする関数で何が必要なのかはドキュメント(リファレンス)に書かれています。OpenCVはとても詳細なドキュメントを用意してくれています。宣言を書き写したところでそれ以上の情報は得られませんから。そして、関数に関する理解を深めたいのなら、とにかく使ってみることです。以前私がまずは動くものを作れといったことはもうお忘れでしょうか。プログラミングにおいては、実際に動かしてみて「この引数をいじるとどう変わるのか」などといろいろ試してみることが理解を深める最も効果的な方法です。
carnage0216

2018/04/14 07:32

>>ヘッダの展開をやってりゃそのうち気づくだろうよ。 過去にヘッダファイルの内容を全て移してコンパイルしたときヘッダファイルの宣言が重複するとかのエラーが出たので、エラーがでるため破綻すると言われたのではないでしょうか?
carnage0216

2018/04/14 07:41 編集

>>その方法で勉強して何を習得できましたか? cvNamedWindowに関する理解は深まりましたか? はい、cvNamedWindowを使うために必要な宣言とどのような標準ライブラリ関数から組まれているのかわかりました。 この勉強はかなり地味ですが、私にとっては力になります。 >>以前私がまずは動くものを作れといったことはもうお忘れでしょうか。 大切な事を忘れていました。
catsforepaw

2018/04/14 09:07

> はい、cvNamedWindowを使うために必要な宣言とどのような標準ライブラリ関数から組まれているのかわかりました。 本当ですか? それが判っているのに、エラーが解決できないとい言って質問してくるのはどういうことでしょうか。 例えば、「#define cvNamedWindow;」←これが何のためにあるのか私には理解できませんが、あなたは何をどう理解してそれが必要だと思ったのですか?
carnage0216

2018/04/14 15:51

ごめんなさい、嘘をつきました。完全には理解できていませんでした。cvWaitKeyにおいてうまく宣言が書くことが出来ず、結局ヘッダファイルを使ったところ実行ファイルが得られました。画像は指定していないたウィンドウが出れば成功で実行したところウィンドウが出ました。 以下がソースコードです。 #include <opencv/cv.h> #include <opencv2/highgui.h> #define CV_WINDOW_AUTOSIZE 0x00000001 int flags = CV_WINDOW_AUTOSIZE; int cvNamedWindow(const char* name, int flags); //void cvWaitKey(int); void cvDestroyWindow(const char*); int main() { cvNamedWindow("test", CV_WINDOW_AUTOSIZE); cvWaitKey(0); cvDestroyWindow("test"); return 0; } >>#define cvNamedWindow; に関しましては、cvNamedWindowが引数にとるCV_WINDOW_AUTOSIZEはint flagsを表し、#define CV_WINDOW_AUTOSIZE 0x00000001よりflagsが1の時、画像を表示するのだとわかりました。(もしかしたら違うかもしれません。) ちなみに載せていただいたソースコード #define CV_WINDOW_AUTOSIZE 0x00000001 int flags = CV_WINDOW_AUTOSIZE; int cvNamedWindow(const char* name, int flags); void cvWaitKey(int); void cvDestroyWindow(const char*); int main() { cvNamedWindow("test", CV_WINDOW_AUTOSIZE); cvWaitKey(0); cvDestroyWindow("test"); return 0; }  をビルドした際は1>Source.cpp 1>Source.obj : error LNK2001: 外部シンボル ""void __cdecl cvWaitKey(int)" (?cvWaitKey@@YAXH@Z)" は未解決です。 1>Source.obj : error LNK2001: 外部シンボル ""void __cdecl cvDestroyWindow(char const *)" (?cvDestroyWindow@@YAXPEBD@Z)" は未解決です。 1>Source.obj : error LNK2001: 外部シンボル ""int __cdecl cvNamedWindow(char const *,int)" (?cvNamedWindow@@YAHPEBDH@Z)" は未解決です。 1>C:\Users\Daito\source\repos\Project5\x64\Release\Project5.exe : fatal error LNK1120: 3 件の未解決の外部参照 1>プロジェクト "Project5.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== と出てしまい、pathの確認、ライブラリの指定も行ったのですがエラーが消えず結果としてヘッダファイルを取り付けて少し変えさせていただいたコードをビルドしてうまくいきました。せっかくヘッダファイルなしのコードを載せていただいたにも関わらず使いこなすことが出来ず残念でなりません。 ttyp03さんには申し訳ないことをしてしまいました。 ですが、あきらめたわけではありません。 ビルドエラーを解消するために奮闘しております。
episteme

2018/04/14 16:29 編集

正しくは以下のとおり: // Source.cpp #define CV_WINDOW_AUTOSIZE 1 extern "C" { int cvNamedWindow( const char*, int ); int cvWaitKey(int); void cvDestroyWindow(const char*); } int main () { cvNamedWindow ("test", CV_WINDOW_AUTOSIZE); cvWaitKey (0); cvDestroyWindow ("test"); return 0; }
episteme

2018/04/14 22:58

>> #define cvNamedWindow; > に関しましては、cvNamedWindowが引数にとるCV_WINDOW_AUTOSIZEはint flagsを表し、 > #define CV_WINDOW_AUTOSIZE 0x00000001よりflagsが1の時、画像を表示するのだと > わかりました。(もしかしたら違うかもしれません。) 回答になっていない。 #define cvNamedWindow; が何を意味する(と考えた)か答えよ。
carnage0216

2018/04/15 05:10

cvNamedWindowを定義するという意味ではないでしょうか? cvNamedWindowを使えるようにする意味だと思います。
episteme

2018/04/15 05:18

だったらなぜエラーになるんだ?!
carnage0216

2018/04/15 05:22

今はエラーが消えたため、推測でしかないのですが、 ライブラリの指定がちゃんとできていなかった為だと思います。
episteme

2018/04/15 05:25

えーと....教本はどんなの使ってます?
carnage0216

2018/04/15 05:33

ちなみに extern "C" { int cvNamedWindow( const char*, int ); int cvWaitKey(int); void cvDestroyWindow(const char*); } int main () { cvNamedWindow ("test", 1); cvWaitKey (0); cvDestroyWindow ("test"); return 0; } でもビルドできました。決して適当ではなく考えて書きました。
carnage0216

2018/04/15 05:34

詳解Opencvです。今回載せたプログラムはサイトから拾いました。
episteme

2018/04/15 05:37 編集

そーじゃなくて、C/C++の教本。 その調子だと、本にあるとおりのものしか書けないんじゃなくて?
carnage0216

2018/04/15 05:51

Ⅽ++はまだ勉強していません。
episteme

2018/04/15 05:58

...そんなんで大丈夫???
carnage0216

2018/04/15 06:00

正直わかりません。(たぶんまずいとは思いますが、どんな参考書で勉強してよいかわかりません。)
carnage0216

2018/04/15 06:01

どう考えても大丈夫じゃないです。こんなではたかが知れた力しか付きません。(偉そうに言える立場ではないですが)
episteme

2018/04/15 06:06

...なんかいろんなもんをすっとばして高みを目指していませんか?
carnage0216

2018/04/15 06:10

そうかもしれません。過去にも同じことを言われ基礎固めとして10日でおぼえるC言語入門教室を購入しました。 高みを目指していますが、まだ全然無理なので簡単な本で基礎固めと思ったのですが、ダメだったでしょうか?
carnage0216

2018/04/15 06:51

あの、先ほどIDAで実行ファイルを逆アセンブルしたところ sub rsp, 28h mov edx, 1 lea rcx, aTest ; "test" call cs:__imp_cvNamedWindow xor ecx, ecx call cs:__imp_cvWaitKey lea rcx, aTest ; "test" call cs:__imp_cvDestroyWindow xor eax, eax add rsp, 28h retn main endpより call cs:__imp_cvNamedWindowと出てきました。 このcvNamedWindowはライブラリだと思うのですが、標準ライブラリ関数で書かれたcvNamedWindowを見る方法はcvNamedWindowを逆アセンブルしてアセンブリプログラムにした後、Ⅽ言語に手書きで地道にしていく以外にないのでしょうか? 多分、なんでそんなことするのだろうと思われますが、ライブラリの基のソースが見たいという好奇心と、次はライブラリがなくてもビルドできるようにしたいためです。
episteme

2018/04/15 07:02

何言ってんだかわかんない。ライブラリのソースが読みたいなら読めばいい。 OpenCVでしょ? 手元にあるぢゃん。
carnage0216

2018/04/15 07:05

そうですよね。すいません。 あの>>そうかもしれません。過去にも同じことを言われ基礎固めとして10日でおぼえるC言語入門教室を購入しました。 高みを目指していますが、まだ全然無理なので簡単な本で基礎固めと思ったのですが、ダメだったでしょうか? に関してはどうしたらよいでしょうか。基礎固めに本を買ったのですが、私には難しいということですか?ならばもっと簡単な本にします。
episteme

2018/04/15 07:10 編集

「10日でおぼえるC言語入門教室」の内容が書名どおりなら、そいつでたどり着けるのはやっと"登山口"まででしょうね。高みには程遠い。 とはいえまずは"登山口"に辿り着かんとどーしよーもないけど。 ...そうねぇ、OpenCVは一旦封印してひたすらその本を読み、コードを試し、必要ならココに質問して"登山口"を目指してはいかが?
carnage0216

2018/04/15 07:26

そうですよね。Opencvを扱うにはあまりにも背伸びしすぎました。 焦りは禁物とわかっていながらも焦らなくては落ち着けません。 epistemeさんのアドバイスに従い一旦Opencvからは離れます。その方が今の自分のためになります。登山口目指して勉強し調べてもわからず困ったら質問させていただきます。 どうもありがとうございます。標準ライブラリ関数を扱えるよう頑張ります。 あの大変恐縮なのですが、epistemeさんは学生時代、C/C++はなんの参考書を扱っていたのでしょうか? 差し支えなければ教えてください。
episteme

2018/04/15 07:36

「プログラミング言語 C」これしかなかった(35年前)。 訳がスットコドッコイな箇所が少なくなかったので原書と並べて読んだ。
episteme

2018/04/15 07:39

> 標準ライブラリ関数を扱えるよう頑張ります。 頑張りの方向がちがうよ。
carnage0216

2018/04/15 07:50

えーと、どの方向に頑張ればいいのですか?
carnage0216

2018/04/15 07:50

ありがとうございます。早速調べてみます。
episteme

2018/04/15 08:03 編集

> えーと、どの方向に頑張ればいいのですか? 阿呆。標準ライブラリが使えたら登山口か? んなわけねーだろ。 https://teratail.com/questions/120623 こんな質問せずに済むようになりなさい。 What(やりたいこと) から How(実現手段) を導くのがプログラマのお仕事です。
episteme

2018/04/15 08:05

「プログラミング言語 C」は今となってはホコリにまみれててお薦めしかねる。 読みたいなら止めはしないが。
carnage0216

2018/04/15 08:10

はい!わかりました。手取り足取りご親切に教えていただきどうもありございます。大変難しいですが、やってみます。 最後に、ツイッターの質問に答えていただくことは出来ないでしょうか。 決して悪ふざけなどではなく、好奇心というか好奇心でも悪ふざけに見えてしまうのかもしれませんが、やましい気はございません。純粋に知りたいと思いました。もし嫌でしたら無視していただいて構いません。 あ、そうなのですか。でも私みたいな基礎能力のない人間には勉強になることは間違いないでしょう。一回書店に足を運んで見に行きます。できれば今日にでも。
carnage0216

2018/04/17 08:55

epistemeさん、今更で申し訳無いのですが、先程見直しとしてvsでcvNamedWindownにポインタを重ねると関数定義が見つかりませんと出てきました。 質問なのですが、cv Name Windowの見つからない定義自体もソースコードに書き込めばopencv world.libを使わなくてもビルドできるわけですよね? 実装するつもりはないですが、理論が正しいか聞きたいです。
carnage0216

2018/04/17 10:10

どうもありがとうございます。
guest

0

こうですかねぇ。

c

1int cvNamedWindow( const char* name, int flags ); 2void cvWaitKey (int); 3void cvDestroyWindow (const char*); 4#define CV_WINDOW_AUTOSIZE 0x00000001 5int main () { 6 cvNamedWindow ("test", CV_WINDOW_AUTOSIZE); 7 cvWaitKey (0); 8 cvDestroyWindow ("test"); 9 return 0; 10}

書き忘れてたので追記します。

ヘッダファイルなしのプログラムにこだわるのはヘッダファイル 自体に無駄が多いため、ソースコードとは関係ないものでエラーを出すためです。

エラーが出るのは必要なインクルードを十分にしていないからです。
OpenCVのようなきちんとした配布物でエラーが出るなんてありえないです。
なのでマニュアルなりサンプルなりを良く理解して使うようにしてください。
またあなたがヘッダーファイルを独自に改変して使うのは構わないですが、バージョンアップやアップデートがあった場合、あなたはまたヘッダーファイルを解析して必要な部分のみを抜き出す作業をしないといけません。
そんな無駄な作業をするのであれば、前述どおり使い方を良く理解して、エラーが出ないコードを書くべきです。

投稿2018/04/13 03:01

編集2018/04/13 04:42
ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/04/13 05:00

>>マニュアルなりサンプルなり やっていても出来ないとなると私は日本語がちゃんと理解出来ていないのだと思いました。 どうもありがとうございます。
episteme

2018/04/13 11:00

てか件のサイトにあるやつは OpenCV 2.1 だぞ。バージョンの違いによる問題ではないことを確認したのか?
carnage0216

2018/04/13 11:13

ごめんなさい。少しお待ちください。
episteme

2018/04/14 01:13

...で、どうだった? 僕とこでは OpenCV 3.4.1 でもコンパイルできることを確認したぞ。
guest

0

https://www.amazon.co.jp/dp/B00EYXMA6Q/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

これは比較的難しい本ですが、ヘッダーファイルを用いるモチベーションが書かれています。
たまに日本語が変ですが、翻訳本によくあることなので大目に見てやってください。

ヘッダーファイルを使わなくても、プログラムが動くために必要な実装は変わりません。

ライブラリは面倒くさい実装を自分でやらなくてもいいようにしたものという認識があれば、今回のような質問が出ないかと思います。

本来のオブジェクト指向から逆行するにはまだプログラミング経験が足りないように見受けられます。

まずはマニュアルをなぞってはいかがでしょうか?

投稿2018/04/13 15:02

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/04/13 15:50

どうもありがとうございます。 初めて見ました。少し高いですが、購入を考えます。 ちなみにmkgreiさんはお持ちでしょうか?
mkgrei

2018/04/13 16:07

電子版で読みました。 固定レイアウトなので、端末が小さいと読みにくいかもしれません。 内容としてはAPIのためのデザインなので、opencvのようなライブラリ開発側の立場からみたクラスの設計方針などが内容です。 カプセル化と隠蔽についての設計思想が述べられていて、ライブラリを変な使われ方をされないようにするためにどうすれば良いのかについて議論があった記憶があります。 少々高いので簡単には手が出ませんが、使用者以外の視点を持ってコードをみる視点を感じ取ることができるかもしれません。
carnage0216

2018/04/14 07:39

どうもありがとうございます。
guest

0

#includeでヘッダファイルを取り込み(インクルード)している部分を、ヘッダファイルの中身で置き換えてゆく。

置き換えたヘッダファイルの中に#includeがあれば、それもヘッダファイルの中身で置き換える。

この作業を#includeが無くなるまで繰り返せば、全ての取り込まれるべきヘッダファイルがソースコードに含まれることになり、ヘッダファイルは不要になります。

長大なヘッダファイルの内容がソースコードの最初に挿入されますから、読みやすくはないと思いますが。

投稿2018/04/13 02:42

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/04/13 05:05

基礎を勉強し直します。 どうもありがとうございました。
episteme

2018/04/14 01:15

#includeをすべて展開してくれる機能は gcc, vc++ 共にあります。手作業でやる必要なし。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問