为什么我的函数名称中会随机出现一个额外的字母?

Why does a random extra letter appearing in my functions name?

我正在尝试将抽象 class 实现为接口定义,但在从中派生 class 时出现奇怪的错误,说我的函数没有覆盖抽象定义.

现在错误消息中出现了奇怪的事情:

'json_object* NetworkCommunication::SendMessageA(const char*, const char*, json_object*)' marked 'override', but does not override

注意到最后多出来的 'A' 了吗?在我的实际代码中没有出现的那个?如果我将它添加到每个定义的代码中,编译工作正常,我可以继续处理下一个错误。

如果我将其复制粘贴到 cppshell,则不会造成任何问题。这是什么原因造成的?

    class NetworkCommunicationInterface
    {
    public:
        virtual json_object* SendMessage(const char* msg, const char* request, json_object* json_post) = 0;
        virtual void SetBaseUrl(const std::string& url) = 0;

        virtual ~NetworkCommunicationInterface(){}
    };

    class NetworkCommunication : public NetworkCommunicationInterface
    {
    public:
        void SetBaseUrl(const std::string& url) override;
        json_object* SendMessage(const char* msg, const char* request, json_object* json_post) override;
        const char* GetBaseUrl();

        NetworkCommunication();
        virtual ~NetworkCommunication(){}

    //Implementation
    NetworkCommunication::NetworkCommunication()
    {
        base_url = "";
    }

    json_object* NetworkCommunication::SendMessage(const char* msg, const char* request, json_object* json_post)
    {
    ...
    }

SendMessage 是一个宏,根据是否定义了 UNICODE 定义为 SendMessageASendMessageW。这在 Windows 头文件中;所以你不能用那个名字定义你自己的函数——除非你先取消定义SendMessage,这可能不是一个好主意。