【问题标题】:Why I am getting "getuid was not declared in that scope" error?为什么我收到“getuid 未在该范围内声明”错误?
【发布时间】:2018-06-17 16:57:48
【问题描述】:
#include <string>
#include <stdio.h>
#include <pwd.h>

std::string impPath()
{
    char *name;
    struct passwd *pass;
    pass = getpwuid(getuid());
    name = pass->pw_name;

    std::string PATH = "/home";
    PATH.append("/");
    PATH.append(name);

    return PATH;
}

我需要知道用户的用户名。为此。我正在使用getpwuid(),但出现此错误。

/home/shobhit/Desktop/file.cpp:15: error: 'getuid' was not declared in this scope
 pass = getpwuid(getuid());
                        ^

我只是无法弄清楚 getuid 未在此范围内声明的原因是什么。我想我已经包含了所有必要的头文件。(yami 对 R 的回答 getlogin() c function returns NULL and error "No such file or directory" 的评论 我尝试在网上搜索,但找不到任何相关答案。

【问题讨论】:

  • 你试过man getuid吗?
  • C 和 C++ 也不是 Java。您不是“包含库”,而是头文件,实际上是源代码。 如果库被使用,那么它们被链接,这是稍后完成的,在源代码的编译之后完成。
  • 是的thanx我已经编辑了我的问题。

标签: c++ getpwuid


【解决方案1】:

man getuid:

概要

#include <unistd.h>
#include <sys/types.h>

uid_t getuid(void);
uid_t geteuid(void);

你缺少那些包含。

【讨论】:

  • 这几行是什么意思 uid_t getuid(void); uid_t geteuid(void);
  • @shobhit 它们是函数声明。这是手册页向您显示实体的类型和名称的方式。这意味着“通过包含这些标头,您可以访问getuid(一个不带参数并返回uid_t的函数)和geteuid(一个不带参数并返回uid_t的函数)。”
  • @shobhit 是的,这就是本文档向您展示的内容。
  • @shobhit 我认为这不是一个好问题。您的代码示例既不完整("impfile_path.h" 是什么?)也不最小(std::stringgetpwuid 的所有内容都无关紧要)。您声称“我已包含所有必要的头文件”而没有正当理由(事实证明,您的主张是错误的)。这个问题没有显示任何研究工作(为什么你认为你已经包含了所有必要的标题?你是如何确定所需的标题的?)。我认为这不太可能对其他人有帮助。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2022-12-06
    • 2011-04-14
    • 2012-04-20
    相关资源
    最近更新 更多