首页 新闻 会员 周边

关于C++函数中返回值有数据,而返回出来之后的数据为空的问题.在线等

0
悬赏园豆:5 [已解决问题] 解决于 2014-03-11 11:59

vector<string> File::GetFolders(const string &path)
{
   vector<string> folders;
   struct dirent* ent = NULL;
   DIR* pDir;
   pDir = opendir(path.c_str());
   while(NULL != (ent = readdir(pDir)))
   {
      string fullpath = path + "/" + ent->d_name;
      //if(4 == ent->d_type)  //在nfs或xfs下,有的目录d_type也是0
      if(IsFolder(fullpath))
      {
         if(strcmp(ent->d_name, ".")!=0 && strcmp(ent->d_name, "..")!=0)
         {
            folders.push_back(ent->d_name);
         }
      }
   }
   closedir(pDir);
   return folders;
}

 

vector<string> fol=GetFolders("/");

函数中是已经得到了目录列表,但是我直接定义了一个vector<string>对象,在return之后直接赋值,这样fol变量里面是没有数据了,为空,这是为什么啊?

新手猿的主页 新手猿 | 初学一级 | 园豆:99
提问于:2013-12-26 14:22
< >
分享
最佳答案
0

有问题,你给了个 File::GetFiles,然后下面调用的是 GetFolders,请问这两者如何联系起来?

收获园豆:5
Launcher | 高人七级 |园豆:45045 | 2013-12-26 14:32

谢谢大神慧眼如炬,忙晕了,贴错代码了.

新手猿 | 园豆:99 (初学一级) | 2013-12-26 15:07

已经改过来了.谢谢

新手猿 | 园豆:99 (初学一级) | 2013-12-26 15:07

@新手猿: File::GetFolders 是成员函数,语句 vector<string> fol=GetFolders("/") 也是放在 File 的非静态成员函数中调用的吗?

Launcher | 园豆:45045 (高人七级) | 2013-12-26 15:25

@Launcher:  是在Main方法中调用的.

新手猿 | 园豆:99 (初学一级) | 2013-12-26 15:45

@Launcher: 是在Main方法中调用的.请问这个会有引起什么错误吗?还是我调用的不对?

新手猿 | 园豆:99 (初学一级) | 2013-12-26 15:45

@新手猿: 我假设你的代码的全貌是这样:

class File

{

 public:

   vector<string> GetFolders(const string &path)

{

   ....

}

};

 

int main()

{

    File file;

    vector<string> fol=file.GetFolders("/")

}

Launcher | 园豆:45045 (高人七级) | 2013-12-26 15:48

@Launcher: 先谢谢大神你的耐心哈.

不过问题依然存在,在GetFolders()里面得到的vector<string> folders是有文件目录列表的,但是我返回出来.vector<string> fol=file.GetFolders("/"). fol里面是空值.

新手猿 | 园豆:99 (初学一级) | 2013-12-26 16:13

@新手猿: 

确实对不起,如果你连自己如何调试代码都不会,我没法帮你,我只能告诉你,下面这段代码在我这里没有任何问题。

class File
{
public:
    std::vector<std::string> GetFolders(const string &path)
    {
        std::vector<std::string> folders;

        folders.push_back("1");
        folders.push_back("2");
        folders.push_back("3");
        folders.push_back("4");

        return folders;
    }
};

int main()
{
    File file;
    std::vector<std::string> fol = file.GetFolders("/");
    size_t count = fol.size();

        return 0;
}

我建议你还是看下 std::vector<T> 的源码,注意它的构造函数。

Launcher | 园豆:45045 (高人七级) | 2013-12-26 16:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册