月別アーカイブ: 2月 2012

[C++] ld: duplicate symbol エラーの解決策

C++でコードを書いていて、duplicate symbolというエラーが出てコンパイルが通らないことがあった。

たとえばこんな感じ。
g++ -O2 -o ./a.out main.cc function.o
ld: duplicate symbol Find_solution(double (*)(Param&, double), Param&, double*)in function.o and /var/folders/5x/5xQHgcY6GxS5B1fAK7NoK++++TI/-Tmp-//ccr88Eat.o
collect2: ld returned 1 exit status
make: *** [constraints] Error 1

調べてみると、同じファイルを二重に include してしまったために、
関数や変数が二重定義されることで起こるエラーのようだ。

解決策としてはヘッダファイルに
#ifndef __FUNCTION_H_INCLUDED_
#define __FUNCTION_H_INCLUDED_
・・・
#endif

と入れることで、二重インクルードを防ぐ方法が一般的。


・・・のはずなのだが、ヘッダファイルに修正を加えてもエラーがとれない。

で、よくよく見てみると
一部のコードでは “function.cc”をインクルードして
別のコードでは “function.h” をインクルードするという
奇妙な状態になっていたことが分かった。

他の人から引き継いだコードだったのでチェックしていなかったのを反省。

“function.h”をインクルードするように修正することで無事に解決をみた。

カテゴリー: Tips | 1件のコメント

[C++] 警告 inline function used but never defined の解決策

プロの人からすれば常識なんだろうけど

C++で inline関数を使っているときに
warning: inline function used but never defined
という警告が出ることがある。

http://www.parashift.com/c++-faq-lite/inline-functions.html#faq-9.6

によれば、inline関数は定義も ヘッダファイルに書かないといけないらしい。

普通の関数は、ヘッダで宣言だけして、定義はソースファイルに書くが
インライン関数の場合は、ヘッダファイルに定義を書くのが正解ということ。

カテゴリー: Tips | コメントをどうぞ

リトバスEX考察1 沙耶は生きてるの?

おかしなことに、胸に違和感を覚えている
それは心の奥のほうだ。
この痛みはなんだ?

僕は朝食を一口つけたまま、ぼうっと考え事をしていた。
この思いはなんなんだろう。
ずっと胸につかえてるんだ。
患っている。
なら決定的だ。
僕は恋したんだ。
誰に?
・・・間の抜けたスパイに。
・・・そして、この世界を創り上げた麻枝氏に。

俺はひとつのことだけをやり遂げようとしていた。
それ以外のことはもう何も考えていなかった。
それが俺がこの世に生を受けて、最後の…
いや、ろくなことしてこなかったからな…
唯一の役割かもしれない。
それは…
沙耶ルートに隠された謎を解き、沙耶を生かすこと。
それだけだ。

リトルバスターズ!エクスタシー(以下リトバスEX)の新ヒロイン
朱鷺戸沙耶(ときど・さや、以下、沙耶)についての考察です。

「...なんかじゃ、ない....!」
「――決して、ネタバレなんかじゃないんだから....!」

はい、ネタバレです。それでもいい人は続きをどうぞ。
続きを読む

カテゴリー: ゲーム | タグ: , | 2件のコメント