Использование очередей как глобальных и работа с их содержимым из main

#c #linux #ubuntu

#c #linux #ubuntu

Вопрос:

Я получаю ошибки о недопустимости аргументов шаблона, и он не видит, что я объявил свои переменные очереди как глобальные .., я попытался поместить их внутрь функции (но это не то, что я хочу, потому что я хочу удалить из main) и тоже не работает.. Вот мои ошибки и код

 program.cpp: In function ‘int main(int, char**)’:
program.cpp:62:24: error: argument of type ‘bool (std::queue<std::basic_string<char> >::)()const’ does not match ‘bool’
program.cpp:62:24: error: in argument to unary !
program.cpp:68:23: error: argument of type ‘bool (std::queue<std::basic_string<char> >::)()const’ does not match ‘bool’
program.cpp:68:23: error: in argument to unary !






#define _XOPEN_SOURCE 500
#include <ftw.h>
#include <stdio.h>
#include <string>
#include <queue>
#include <iostream>

#define SIZE 100

using namespace std;

  queue<string> bfFilesQueue;
  queue<string> bfDirsQueue;

static int display_info(const char *fpath, const struct stat *sb,
             int tflag, struct FTW *ftwbuf)
{

    //Check the type of Flag (i.e File or Directory)
    switch(tflag)
    {
        case FTW_D: 
        case FTW_F: 
                    bfFilesQueue.push(fpath);
                    break;

        case FTW_DP: 
                     bfDirsQueue.push(fpath);
                     break;
    }
    return 0; /* Continue */
}

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

    if (argc != 2) {
        fprintf(stderr, "Usage: %s directory_namen", argv[0]);
        return 1; 
    }  

    int flags = FTW_DEPTH | FTW_MOUNT | FTW_PHYS;


    if (nftw(argv[1], display_info, 20, 1) == -1)
    {
        perror("nftw");
        return 255;
    }
   printf("***************************n");

   while(!bfFilesQueue.empty)
   {
       cout << bfFilesQueue.front() << " ";
        bfFilesQueue.pop();
   }

   while(!bfDirsQueue.empty)
   {
       cout << bfDirsQueue.front() << " ";
        bfDirsQueue.pop();
   }


    return 0;
}
  

Комментарии:

1. bfFilesQueue.empty(), а не bfFilesQueue.empty . Вы вызываете метод. То же самое для bfDirsQueue.

2. Я только что отменил вашу правку. Не просто удаляйте свой вопрос, даже если он был решен. Это только сбивает с толку других, которые позже приходят на этот сайт и задаются вопросом, в чем проблема.

Ответ №1:

Ваши операторы while пытаются проверить саму функцию std::queue::empty(), а не результат вызова функции. Тип, который появляется в вашем сообщении об ошибке, — это тип функции.

Как говорится в комментарии overcoder, добавление круглых скобок исправит код.