c++ - 错误:对成员的请求是非类类型 string & char

这是我的节点结构;

class Node
{
public:
    string data;
    Node *next;
    Node *child;
};
Node *
createList(string *arr, int n)
{
    Node *head = NULL;
    Node *tmp;

    for (int i = 0; i < n; i++)
    {
        if (head == NULL)
        {
            tmp = head = new Node();
        }
        else
        {
            tmp->next = new Node();
            tmp = tmp->next;
        }

        tmp->data = arr[i];
        tmp->next = tmp->child = NULL;
    }
    return head;
}

这是我遇到的问题。

filesystem::path cwd = filesystem::current_path();
    int file_count;
    vector files = filesInDir(cwd, file_count);

    string file_names[file_count];
    string file_extensions[file_count];
    string file_sizes[file_count];

    for (int i = 0; i < file_count; ++i)
    {
        for (int i = 0; i < file_count; ++i)
        {
            file_names.push_back(files[i + 0 * file_count]);
            file_extensions.push_back(files[i + 1 * file_count]);
            file_sizes.push_back(files[i + 2 * file_count]);
        }
    }

    Node *head1 = createList(file_names, file_count);
    Node *head2 = createList(file_extensions, file_count);
    Node *head3 = createList(file_sizes, file_count);
main.cpp:54:24: error: request for member 'push_back' in 'file_names', which is of non-class type 'std::string [file_count]' {aka 'std::__cxx11::basic_string<char> [file_count]'}
   54 |             file_names.push_back(files[i + 0 * file_count]);
      |                        ^~~~~~~~~

我正在尝试读取当前目录中的所有文件,并将它们保存到 vector((file_name_1, file_extension_1, file_size_1), ......) 中(所有这些文件都采用 string 格式)。我需要使用多个 linked list 到 store 他们,我该如何解决这个问题?

回答1

push_back() 是标准 C++ 容器的一种方法,例如 https://en.cppreference.com/w/cpp/container/vector。但是您尝试在没有方法的 C 样式可变长度数组上调用它(顺便说一句,它们是 https://stackoverflow.com/questions/1887097)。

由于您已经在使用 std::vector 来返回 filesInDir() 的返回 value,因此只需使用 std::vector<std::string> 而不是 std::string[] 作为可变长度数组,例如:

vector<string> file_names;
file_names.reserve(file_count);

// populate file_names as needed ...

Node *head1 = createList(file_names.data(), file_names.size());
...

file_extensionsfile_sizes 数组也执行相同的操作。

此外,由于您仍然使用标准库(对于 std::stringstd::vectorstd::filesystem),请考虑使用 https://en.cppreference.com/w/cpp/container/list(双链接)或 https://en.cppreference.com/w/cpp/container/forward_list (single-linked) 用于链表,而不是使用手动实现。

回答2

我用它解决了;

for (int i = 0; i < file_count; ++i)
    {
        for (int i = 0; i < file_count; ++i)
        {
            file_names[i] = (files[i + 0 * file_count]);
            file_extensions[i] = (files[i + 1 * file_count]);
            file_sizes[i] = (files[i + 2 * file_count]);
        }
    }

但是这次我需要向节点结构添加尾指针,我正在尝试解决这个问题

class Node
{
public:
    string data;
    Node *next;
    Node *child;
};

Node *
createList(string *arr, int n)
{
    Node *head = NULL;
    Node *tmp;

    for (int i = 0; i < n; i++)
    {
        if (head == NULL)
        {
            tmp = head = new Node();
        }
        else
        {
            tmp->next = new Node();
            tmp = tmp->next;
        }

        tmp->data = arr[i];
        tmp->next = tmp->child = NULL;
    }
    return head;
}

相似文章

随机推荐

最新文章