C++ 使用命名空间和静态方法时遇到问题

C++ 使用命名空间和静态方法时遇到问题,c++,class,c++11,namespaces,C++,Class,C++11,Namespaces,我试图编写一些名称空间静态方法和变量,以便在代码中的任何地方都可以使用一组函数。这就是我所拥有的: 标题: 然后在代码的某个地方,我有: #include "CProfileIO.h" int main(int argc, char * argv[]) { string appDir = string(dirname(*argv)); CProfileIO::setAppDir(appDir); . . . } 当我尝试编译时,在我使用函数的行中出现错

我试图编写一些名称空间静态方法和变量,以便在代码中的任何地方都可以使用一组函数。这就是我所拥有的: 标题:

然后在代码的某个地方,我有:

#include "CProfileIO.h"

int main(int argc, char * argv[])
{
    string appDir = string(dirname(*argv));
    CProfileIO::setAppDir(appDir);
    .
    .
    .
}
当我尝试编译时,在我使用函数的行中出现错误:

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

我想不出是怎么回事。我愿意提供一切帮助

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

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

您不应该在这里使用静态函数,因为它们仅在当前翻译单元中可见。因此,您声明了一个在cpp中定义(静态)的静态函数,那么它在其他转换单元中将不可见

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


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

此处不应使用静态函数,因为它们仅在当前翻译单元中可见。因此,您声明了一个在cpp中定义(静态)的静态函数,那么它在其他转换单元中将不可见

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


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

的可能重复。您真的认为它与名称空间有关吗?请参阅可能的重复。您真的认为它与名称空间有关吗?请参阅,我在开始时有一个类而不是名称空间,但后来我读到我应该有名称空间。我试图遵循这个解决方案,一开始我有一个类而不是名称空间,但后来我读到我应该有名称空间。我试图遵循这个解决方案Okaayi,所以我不知道C++静态与C一样。但是现在我真的很困惑,我应该如何在一个名称空间中声明函数和变量来访问它们我知道,但我不知道如何以“正确”的方式构造名称空间文件。现在我已经把函数定义从.cp文件移动到.h文件,就像我在标准C中所做的那样,它工作,但是看起来不太好。你在这里做的完全可以。Okaayi因此我不知道C++中的静态与C一样。但是现在我真的很困惑,我应该如何在一个名称空间中声明函数和变量来访问它们我知道,但我不知道如何以“正确”的方式构造名称空间文件。Fow现在我已经将functioncs定义从.cpp文件移到了.h文件,就像我在标准c中所做的那样,它可以工作,但看起来不太好。你在这里做的方式很好。
#include "CProfileIO.h"

int main(int argc, char * argv[])
{
    string appDir = string(dirname(*argv));
    CProfileIO::setAppDir(appDir);
    .
    .
    .
}
... undefined reference to `CProfileIO::setAppDir(std::string)'