読者です 読者をやめる 読者になる 読者になる

Visual Studio 2010 : LNK4042

VS2010

自分も最初ビビったのでメモ。
もし、namespaceを用いて

// Hoge/HogeHoge.hpp
namespace Hoge
{
class HogeHoge { /* ... */ };
}

// Hoge/HogeHoge.cpp
namespace Hoge
{
// ...
}
// Piyo/HogeHoge.hpp
namespace Piyo
{
class HogeHoge
{ /* ... */ };

// Piyo/HogeHoge.cpp
namespace Piyo
{
// ...
}

としてビルドした場合、何も設定していないと
warning LNK4042: object specified more than once; extras ignored
が出ることがあります。
これは、Hoge/HogeHoge.cppとPiyo/HogeHoge.cppで同じ名前のobjファイルが同じディレクトリに作成されることに問題があります。
もし、このような事態を避けたいと思ったら、
projectのブロパティーから、C/C++ -> Output Files -> Object File Name を
$(IntDir)/%(RelativeDir)/
と変更することで、それぞれHoge/HogeHoge.objとPiyo/Hogehoge.objとして別のディレクトリに
作成されます。(僕の場合だと、もともと$(IntDir)となっていました)