C++ 运算符=对于字符串集不明确
我的基类.h文件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
#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;
}