使用命名空间和静态方法的麻烦

时间:2015-06-11 08:21:00

标签: c++ class c++11 namespaces

我正在尝试编写一些名称空间静态方法和变量,以便拥有一组可以在代码中的任何位置使用的函数。这就是我所拥有的: 部首:

namespace CProfileIO
{
    static void setAppDir(std::string appDir);
    static int reloadProfiles();

    static std::string directory;
    static std::list<std::string> profilesList;
}

来源:

namespace CProfileIO
{

void setAppDir(std::string appDir)
{
    directory = appDir;
}

int reloadProfiles()
{
    // ...
}

} // namespace CProfileIO

然后我在代码的某处:

#include "CProfileIO.h"

int main(int argc, char * argv[])
{
    string appDir = string(dirname(*argv));
    CProfileIO::setAppDir(appDir);
    .
    .
    .
}

当我尝试编译时,我在使用该函数的行中收到错误:

... undefined reference to `CProfileIO::setAppDir(std::string)'

我无法弄清楚出了什么问题。我会帮助你!

2 个答案:

答案 0 :(得分:3)

您不应在此处使用静态函数,因为它们仅在当前翻译单元中可见。因此,您声明了一个静态函数,您可以在cpp中定义(静态),然后从其他翻译单元中看不到它。

您不应在此处使用static关键字,而是将变量(但不是函数)声明为extern

另外,我建议将字符串参数作为const引用(void setAppDir(const std::string& appDir);

传递

答案 1 :(得分:1)

这是因为静态方法只在当前模块中可见(源文件)。他们没有联系。 因此,您的其他源文件找不到该功能。如果你使用静态,那应该会发生。我不知道为什么你会将裸体函数声明为静态,也许你想将它们放入一个类中?