おそらく非常に些細な問題で何時間も立ち往生しています。
これはクラスの最も基本的な使い方です。
ヘッダー ファイル: person.h
class person
{
protected:
std::string _Name;
public:
void setName(std::string);
};
実装: person.cpp
#include <string>
#include "person.h"
void person::setName(std::string name)
{
_Name = name;
}
ドライバー: main.cpp
#include <iostream>
#include "person.cpp"
int main()
{
std::cout << "Yes, it worked.\n";
return 0;
}
(GNU GCC を使用して) CodeBlocks でこのコードをコンパイルしようとすると、エラーが発生します。
~\person.cpp|5|multiple definition of `person::setName(std::string)'|
~\person.cpp|5|first defined here|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===|
ヘッダー ファイルにプロトタイプがあり、実装ファイルに本体があります。複数の定義はどこにありますか? person.cpp で 'void' の前に 'inline' を追加すると機能しますが、この場合はなぜですか?
さらに、これとまったく同じコードを cmd で "g++ main.cpp -o main.exe" としてコンパイルすると、(インラインなしで) 完全に動作します!