LNK2005& LNK1169具有外部功能

时间:2015-09-17 16:07:53

标签: c++ linker extern

我尝试使用一个简单的函数将当前目录作为字符串返回: Utils.h包含:

#ifndef __UTILS__
#define __UTILS__

#pragma once

#include <string>

#include <stdio.h>  /* defines FILENAME_MAX */
#ifdef __linux__    
    #include <unistd.h>
    #define GetCurrentDir getcwd
#else
    #include <direct.h>
    #define GetCurrentDir _getcwd
#endif


namespace
{
    extern std::string _getCurrentDirectory() 
    {
        char cCurrentPath[FILENAME_MAX];
        if (!GetCurrentDir(cCurrentPath, sizeof(cCurrentPath)))
            return "";

        cCurrentPath[sizeof(cCurrentPath) - 1] = '\0'; /* not really required */

        return std::string(cCurrentPath);
    }
}


#endif // __UTILS__

尽管extern声明(冗余?)和创建这个指定的Utils.h文件,我仍然有链接问题:

Error   2   error LNK2005: "char * __cdecl getCurrentDirectory(void)" (?getCurrentDirectory@@YAPADXZ) already defined in MyLibrary.lib(myobj.obj)
Error   3   error LNK1169: one or more multiply defined symbols found   

此问题出现两次,MyLibrary.lib甚至不使用或包含Utils.h 尽管我花了很多时间,但我真的不明白。 有没有人有想法?

由于

0 个答案:

没有答案