c++ - 匿名聚合中不允许构造函数,结构中的字符串

标签 c++ string struct

所以我在尝试创建和使用这个结构时遇到了错误。使用 char 而不是字符串的结构有效,但我发现我将需要能够存储许多字母。使用下面的这个小代码示例后,我收到此错误:

错误:匿名聚合字符串 c1 中不允许带有构造函数的成员‘std::__cxx11::string GraphNode::::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 在 Unnamed Structure and Union Fields 中记录了该语言. GCC 对该功能的实现不允许未命名结构具有具有非平凡构造函数的成员。 Clang 和 MSVC 显然支持类似的扩展,但具有更自由的限制,因此允许使用 std::string 成员。

最好的解决方案是停止依赖非标准扩展,而只使用适用于任何地方的标准 C++。没有理由在您的示例中使用未命名的 struct,因此只需编写:

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

关于c++ - 匿名聚合中不允许构造函数,结构中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41031424/

相关文章:

c - c中的结构默认值

c++ - 链接失败。如何使用 'NtQuerySystemTime' windows函数?

C++ push_back 到数组中更改对象的变量

c++ - 如何从 std::vector 的末尾删除几个元素?

string - .htaccess - 删除/编辑/删除查询字符串参数/标志

java - 使用 HashSet 存储文本文件并从中读取

c++ - 当存在调试代码时如何禁止 git 提交

c - 为什么我总是得到字符串数组的最后一个元素?

C++ 增量运算符

c++ - 是否可以使用位域数组?