我正在尝试编写一些名称空间静态方法和变量,以便拥有一组可以在代码中的任何位置使用的函数。这就是我所拥有的: 部首:
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)'
我无法弄清楚出了什么问题。我会帮助你!
答案 0 :(得分:3)
您不应在此处使用静态函数,因为它们仅在当前翻译单元中可见。因此,您声明了一个静态函数,您可以在cpp中定义(静态),然后从其他翻译单元中看不到它。
您不应在此处使用static
关键字,而是将变量(但不是函数)声明为extern
。
另外,我建议将字符串参数作为const引用(void setAppDir(const std::string& appDir);
)
答案 1 :(得分:1)
这是因为静态方法只在当前模块中可见(源文件)。他们没有联系。 因此,您的其他源文件找不到该功能。如果你使用静态,那应该会发生。我不知道为什么你会将裸体函数声明为静态,也许你想将它们放入一个类中?