C++ 运算符=对于字符串集不明确

C++ 运算符=对于字符串集不明确,c++,C++,我的基类.h文件 #ifndef ITEM_H #define ITEM_H #include <ostream> #include <set> #include <string> using namespace std; typedef set<string> StringSet; class Item { protected: string title; StringSet keywords; public: I

我的基类.h文件

#ifndef ITEM_H
#define ITEM_H

#include <ostream>
#include <set>
#include <string>

using namespace std;
typedef set<string> StringSet;

class Item
{
protected:
    string  title;
    StringSet keywords;
public:
    Item();
    Item(const string& title, const string& keywords);
    virtual ~Item();
    //virtual void addKeywords(string keyword) const;
    string getTitle();
    string getKeywords();

};
#endif
为什么这一行的
keywords={“no keywords”}会得到一个“C2593:'operator='是不明确的”,如何解决?
谢谢。

{“无关键字”}
是一个初始值设定项列表,显然Visual Studio无法将赋值运算符用于带有初始值设定项列表的
std::set
。 相反,您可以直接使用集合的构造函数:

Book::Book()
 : keywords({ "no keywords" })
{
    title =     "no title";
    author =    "no author";
    pagesNr =   0;

}
最小“工作”(给出相同的错误)示例如下

#include <string>
#include <set>

int main()
{
    std::set<std::string> keywords;
    keywords = { "no keywords" }; // error

    return 0;
}
#包括
#包括
int main()
{
设置关键字;
关键字={“无关键字”};//错误
返回0;
}

您还应该说您使用VS 2013。VS 2013不完全支持初始值设定项列表,但如果使用VS 2015进行编译,则一切都会正常编译。

编译器是否都这么说?
c:\users\evghenii\documents\visualstudio 2013\projects\proj4cs261\proj4cs261\musicalbum.cpp(7):错误C2593:“operator=”不明确1>e:\program files(x86)\microsoft visual studio 12.0\vc\include\set(180):可能是“std::set&std::set::operator=(std::initializer_list)”1>,其中1>[1>\u Kty=std::string 1>]
,这可能是编译器过载错误。试试
keywords={{“无关键字”}它给出了相同的错误。请将完整的编译器添加到问题中,格式正确。感谢提供一个更简单的示例。我刚刚使用GCC4.8.2(使用
-std=c++11-Wall-Wextra
)进行了编译,没有出现错误,因此这似乎是一个实现质量问题。
#include <string>
#include <set>

int main()
{
    std::set<std::string> keywords;
    keywords = { "no keywords" }; // error

    return 0;
}