Fehler: variable oder Feld als ungültig erklärt

Dies ist tatsächlich das Programm mein Lehrer hatte mit uns mit zu arbeiten, musste ich einige Veränderungen so weit, um es zu bekommen, um zumindest kompilieren:

 #include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include <cstdlib>
#include <iostream>
#include <cctype>
#include <cstdio>
#include <string>
#include <list>

using namespace std;
std::string makeString();
std::string path= "/";
DIR*dirp;
struct dirent*direntp;
std::list<string> child_directories;



void dir_traverse(&path, ios::out){
    list<string> child_directories;
    DIR*dirp = opendir(path.data());
    struct dirent*dir_entry = readdir(dirp);
        while(dir_entry !=null){ 
             unsigned char d_type = dir_entry->d_type==DT_OIR?'D' : 'R';
             if(d_type == 'D'){ 
                if(dir_entry->d_name[0]!= '.')
                    {
                    child_directories push_back(dir_entry_d_name);
                }

             }
            out<<'\t'<<d_type<<":"<<dir_entry->d_name<<endl;
            dir_entry= readdir(dirp);
        }
        list<string>::iterator it = child_directories.begin();
        while(it! = child_directories.end())
            {
                dir_traverse(&path + "/" + *it, out);
                it++;
            }
        closedir(dirp);
}

Bekomme ich die Fehlermeldung, ich habe wie der Titel in Bezug auf die dir_traverse Funktion. Ich bin ziemlich daran interessiert, herauszufinden, was das problem verursacht und warum. Die Hälfte von dem, was passiert in der Funktion, die ich nicht wirklich im moment, das ist wahrscheinlich, warum ich bin mit dieser Zusammenstellung Frage. nur nicht up-to-Geschwindigkeit auf c/c++ noch nicht 🙂

Dank

edit:

void dir_traverse(string& path, ostream& out){
    list<string> child_directories;
    DIR*dirp = opendir(path.data());
    struct dirent*dir_entry = readdir(dirp);
        while(dir_entry !=NULL){ 
             unsigned char d_type = dir_entry->d_type==DT_DIR?'D' : 'R';
             if(d_type == 'D'){ 
                if(dir_entry->d_name[0]!= '.')
                    {
                    child_directories.push_back(dir_entry_d_name);
                }

             }
            out<<'\t'<<d_type<<":"<<dir_entry->d_name<<endl;
            dir_entry= readdir(dirp);
        }
        list<string>::iterator it = child_directories.begin();
        while(it != child_directories.end())
            {
                dir_traverse(&path + "/" + *it, out);
                it++;
            }
        closedir(dirp);
}
  • Markieren Sie die Zeile im code, wo der compiler zeigt den Fehler.
  • Was hat der header der dir_traverse() Funktion Aussehen, bevor Sie es geändert? Etwas mehr wie void dir_traverse(const std::string& path, std::ostream& out)?
  • ja, dass ist in der Nähe, was war: void dir_traverse(string path, ostream&out)
  • Dachte so. Also, wenn Sie sagte: "ich hatte mehrere änderungen vornehmen so weit, um es zu bekommen, um zumindest kompilieren", was Sie meinte, war "ich machte einige änderungen, so weit und jetzt ist es nicht kompilieren". Dein code ist übersät mit syntax-Fehler und unnötige header-Richtlinien und redundante Variablen-Deklarationen. Was ist der Sinn deiner Hausaufgabe? (Ich will helfen, ich will einfach nicht Ihre Hausaufgaben für Sie.)
  • das ist nicht die Hausaufgabe eigentlich ist dies genau das, was der Lehrer lief durch die Klasse. Meine Absicht war, mit ihm zu arbeiten für das hw, da diese wirklich helfen würde. Brauche ich zu suchen, durch Verzeichnisse und vergleicht alle Dateien mit einer bestimmten Datei, um zu sehen, ob Sie mit schon vorhandenen Dateien. Ich bearbeitet meine Frage war der ursprüngliche code gingen wir durch
  • Ok, ich ging zurück zu den ursprünglichen code und in der Lage war, es zu kompilieren, jedoch, wenn ich es bekomme ich ein permission denied... ich vermute, dass hat damit zu tun, wie mein ubuntu-Dateisystem eingerichtet ist?

InformationsquelleAutor user975044 | 2011-10-14
Schreibe einen Kommentar