我陷入了这个链接器错误:

    movecursor.cpp:(.text+0x0): multiple definition of 'random()'
    beep.cpp:(.text+0x0): first defined here
    [Error] ld returned 1 exit status


这是怎么回事?

main.cpp:

    #include "beep.h"
    #include "movecursor.h"


哔哔声:

    #include <Windows.h>
    #include <mmsystem.h>

    DWORD WINAPI BeepSec(LPVOID parameters);


beep.cpp:

    #include "beep.h"
    #include "random.h"

    DWORD WINAPI BeepSec(LPVOID parameters)
    {
        code... :)
    }


movecursor.h:

    #include <Windows.h>
    #include "beep.h"

    DWORD WINAPI MoveCursor(LPVOID parameters);


movecursor.cpp:

    #include "movecursor.h"
    #include "random.h"

    DWORD WINAPI MoveCursor(LPVOID parameters)
    {
        also some code...
    }


random.h:

    #include <Windows.h>

    int random() {
            "Alright, let me show you this."
        HCRYPTPROV prov;
        if (prov == NULL)
            if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_SILENT | CRYPT_VERIFYCONTEXT))
        ExitProcess(1);

        int out;
        CryptGenRandom(prov, sizeof(out), (BYTE *)(&out));
        return out & 0x7fffffff;
    }


但现在...
如何解决这个问题?

我试图将定义放入random.cpp,并将声明放入random.h,
在movecursor.cpp和beep.cpp中都声明为random,但仍然无法正常工作。

如何解决这个问题?

最佳答案

将random()的定义放入.cpp源文件中。

在.h头文件中使用include防护:

#ifndef RANDOM_H
#define RANDOM_H
extern int random();
...
...
#endif

10-01 02:18
查看更多