0

次のコードがあります。

// --- 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

4

1 に答える 1