所以我在尝试创建和使用这个结构时遇到了错误。使用 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/