如何在用户定义的命名空间的成员函数中引用指针** environ?

时间:2013-03-23 12:39:31

标签: c++ compiler-construction namespaces g++

#include <iostream>

namespace A {
    void func();
}

void  A::func()
{
    extern char **environ;
    std::cout << environ[0] << std::endl;
}

int main()
{
     A::func();
     return 0;
}

与上面的代码一样,我只想在**environ中使用系统定义的指针A::func(),但g ++总是说:

undefined reference to `A::environ'

如何正确使用系统定义的变量environ

2 个答案:

答案 0 :(得分:1)

您只需要在全局范围内声明environ,这当然是在其定义的位置,而不是在您的函数中。

如果你想对它更清洁并避免不必要地使用全局变量,你可以用这种方式声明main:

int main(int argc, char* argv[], char* envp[])

然后只需将envp传递给您的函数即可。它将与全球一样。

答案 1 :(得分:1)

添加

 #include <unistd.h>

和环境必须在全球范围内。

所以代码看起来像这样:

#include <iostream>
#include <unistd.h>
extern char **environ;
namespace A {
void func();
}

void  A::func()
{

    std::cout << environ[0] << std::endl;
}

int main()
{
     A::func();
     return 0;
}