次のコードがあります。
// --- message_queue.hpp ---
namespace vca {
namespace keystone {
namespace messaging {
class VCA_KEYSTONE_DLL_PUBLIC MessageQueue final {
[...]
Message PeekMessage(); // <-- Declaration
[...]
};
} // namespace messaging
} // namespace keystone
} // namespace vca
// --- message_queue.cpp ---
namespace vca {
namespace keystone {
namespace messaging {
Message MessageQueue::PeekMessage() { // <-- Definition
[...]
}
} // namespace messaging
} // namespace keystone
} // namespace vca
から次の奇妙なエラーが表示されMinGW-builds-4.8.1-x64-posix-seh
ます。
..\..\lib\messaging\src\message_queue.cpp:281:35: error: no
'vca::keystone::messaging::Message vca::keystone::messaging::MessageQueue::PeekMessageA()'
member function declared in class 'vca::keystone::messaging::MessageQueue'
Message MessageQueue::PeekMessage() {
^
私を混乱させるのは、PeekMessageA()
関数が存在しないと言っている理由A
です。どこから来たのですか?
定義を削除すると、コンパイルされ、予想されるリンカ エラーが発生します。
lib\messaging\src\task.cpp.1.o: In function
`vca::keystone::messaging::Task::TaskImpl::PeekMessageA()':
../../lib/messaging/src/task.cpp:939:
undefined reference to `vca::keystone::messaging::MessageQueue::PeekMessageA()'
collect2.exe: error: ld returned 1 exit status
これは、 にA
が追加されていることを示していTask::TaskImpl::PeekMessageA
ます。これは何ですか?また、ファイルをビルドするときに正しいシンボルのコンパイルが見つからないのA
はなぜですか?gcc