だから私のプログラムはうまく機能しています。コンパイル、リンク、実行、作業。次に、次のような単純な関数をファイルの1つに追加することにしました。
#ifndef UTILITY_HPP
#define UTILITY_HPP
/* #includes here. There's no circular include, I've checked. */
namespace yarl
{
namespace utility
{
(several function declarations and definitions)
bool isVowel(const char c)
{
if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
return true;
else return false;
}
}
}
#endif
その関数定義は、コードに加えた唯一の変更です。他のすべてはそれがあったのとまったく同じです。まだ何も呼ばれていません。コンパイルしましたが、リンクに失敗しました。g++は、これを含むすべてのファイルに対して次のエラーの1つを返します。
./obj/Feature.o: In function `yarl::utility::isVowel(char)':
/home/max/Desktop/Development/Yarl Backup/yarl v0.27/src/Utility.hpp:130: multiple definition of `yarl::utility::isVowel(char)'
./obj/Events.o:/home/max/Desktop/Development/Yarl Backup/yarl v0.27/src /Utility.hpp:130: first defined here
./obj/GameData.o: In function `yarl::utility::isVowel(char)':
コメントアウトするisVowel
と、再び機能します。名前を変更しようとしましたが、まだ機能しません。に置き換えてみましたがvoid randomFunctionName() {}
、まだ動作しません。非インラインにして、関数本体をUtility.cppに入れてみましたが、まだ機能しません。私は非常に混乱しています。単純な関数を1つ追加すると、リンカーが台無しになるのはなぜですか?