构造函数不允许在匿名聚合中,struct中的字符串

constructor not allowed in anonymous aggregate, string in struct

本文关键字:struct 字符串 不允许 构造函数      更新时间:2023-10-16

,所以我正在尝试创建和使用此结构的错误。使用char而不是字符串的结构工作,但我发现我需要能够存储许多字母。在下面使用了这一小代码样本后,我会得到此错误:

错误:成员'std :: __ cxx11 :: string graphnode :::: c1'不允许在匿名聚合字符串C1;

中使用构造函数
#include <iostream>
    #include <cstdlib>
    #include <fstream>
    #include <functional>
    #include <queue>
    #include <vector>
    #include <string>
    #include <map>
    using namespace std;
    class Node
    {
    public:
        struct
        {
            string info;
            Node *next;
            int weight;
            bool activated;
        };
    };

我更加称呼的问题是,弦不适用于结构吗?是否有不同的方式来声明此或另一种工作?

此代码使用C 语言的非标准扩展名,GCC在未命名的结构和联合字段中记录了该代码。海湾合作委员会对功能的实现不允许未命名的结构具有具有非平凡构造函数的成员。Clang和MSVC显然支持类似的扩展名,但具有更宽松的限制,因此允许std::string成员。

最好的解决方案是停止依靠非标准扩展名,而只使用到处都可以使用的标准C 。在您的示例中没有理由使用未命名的struct,所以只需写:

class Node
{
public:
    string info;
    Node *next;
    int weight;
    bool activated;
};

您的问题是字符串具有用户指定的构造函数,该构造函数在汇总(例如未命名的struct)中不允许,因为它是非POD类型。如果您给结构一个名称,则应解决您的问题。例如,使其成为非聚合:

struct data
{
    ...
};
//or
struct
{
    ...
} data;

这是一个很好的解释,即什么是聚集体和豆荚,以及它们如何/为什么特别?

,或者,如果您想保留它,则可以做

struct
{
    string* info; //change to a pointer
    Node *next;
    int weight;
    bool activated;
};

我绝不是汇总或豆荚的专家,所以有人可以随意纠正我