我有一个包含一个vector的shared_ptr的结构。在我的代码中,我遇到了3个与此相关的错误:
在这一行,
newtickerDiary t; t.dataPtr->reserve(MAX_OHLC_ENTRIES); tDiaries[token] = t;
我收到此错误:
函数“ newtickerDiary :: operator =(const newtickerDiary&)”(已声明 隐式)不能被引用-这是一个已删除的函数
在这一行,
QuotationWTime &prevQ = tDiaries[token].dataPtr[size -> 1];
我收到以下错误:
没有运算符“ []”与这些操作数匹配
在这一行,
for (auto x : tDiaries) { x.second.updatesOn = false; }
我收到以下错误:
函数“ std :: pair <_Ty1,_Ty2> :: pair(const std :: pair <_Ty1,_Ty2>&)[with _Ty1 = const std :: string,_Ty2 = newtickerDiary]“(在“ C:\ Program Files(x86)\ Microsoft Visual的第133行声明 Studio \ 2019 \ Community \ VC \ Tools \ MSVC \ 14.21.27702 \ include \ utility“) 无法引用-这是一个已删除的功能
以下是相关的数据容器/类型:
typedef int16_t int16;
typedef int32_t int32;
struct QuotationWTime {
union AmiDate DateTime; // 8 byte
float Price;
float Open;
float High;
float Low;
float Volume;
float OpenInterest;
float AuxData1;
float AuxData2;
};
struct newtickerDiary {
string name = ""; //AmiBroker scrip name
string ohlcPeriodicity = "minute"; //interval of fetched OHLC data
bool ohlcStatus = false; //updated initially. Will be set to 0 upon plugin initialization
bool rtStatus = false;//updated initially. Will be set to 0 upon plugin initialization
bool updatesOn = true;
int32 ohlcDayBarIndex = 0; //last updated bar
shared_ptr<vector<QuotationWTime>> dataPtr = std::make_shared<std::vector<QuotationWTime>>();
mutex dataMutex;
};
unordered_map<string, newtickerDiary> tDiaries;
我需要帮助找出如何解决这些错误。
答案 0 :(得分:1)
std::mutex
不可复制,也不可移动。而且由于newtickerDiary
的成员类型为std::mutex
,所以它也不是可复制或不可移动的(至少不是隐式的;您可以提供显式的复制/移动构造函数和赋值运算符)。
这就是tDiaries[token] = t;
无法编译的原因-它试图复制newtickerDiary
的实例。与std::shared_ptr
无关。
类似地,for (auto x : tDiaries)
尝试复制tDiaries
的元素,但由于不可复制而失败。您可能无论如何都不想在这里复制(否则分配给x.second.updatesOn
会毫无意义)。做吧
for (auto& x : tDiaries)
注意与号。
tDiaries[token].dataPtr[size - 1]
失败是因为tDiaries[token].dataPtr
不是数组或容器-它是指向数组的指针。做吧
(*tDiaries[token].dataPtr)[size - 1]