错误:成员请求是非类类型的字符串和字符



这是我的节点结构;

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), ......)(所有文件都是字符串格式)。我需要使用多链表来存储它们,我该如何解决这个问题?

push_back()是标准c++容器的方法,如std::vector。但是你试图在C风格的变长数组上调用它,而不是没有方法(顺便说一句,它们不是标准c++的一部分)。

既然您已经使用std::vectorfilesInDir()的返回值,只需使用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::string,std::vectorstd::filesystem),请考虑使用std::list(双链接)或std::forward_list(单链接)用于链表,而不是使用手动实现。

我用;

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;
}

相关内容

  • 没有找到相关文章