这是我的节点结构;
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_extensions
和 file_sizes
数组也执行相同的操作。
此外,由于您仍然使用标准库(对于 std::string
、std::vector
和 std::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;
}