我有两个列表和一个要查找的名称。如果要查找的名称不在第一个列表中,则它可能位于第二个列表中,格式略有不同。给出了两种格式之间的转换功能。
public void Print(string imagePath, int copies)
{
var doc = new PrintDocument();
PrintController printController = new StandardPrintController();
doc.PrintController = printController;
doc.PrinterSettings.PrinterName = PhotosConfig.PrinterName;
doc.PrinterSettings.Copies = (short)copies;
doc.PrinterSettings.DefaultPageSettings.PaperSize = new PaperSize("10x15x2(4x6\"x2)", 100, 150);
doc.PrinterSettings.DefaultPageSettings.Margins = new Margins(0,0,0,0);
doc.DefaultPageSettings.PaperSize = new PaperSize("10x15x2(4x6\"x2)", 100, 150);
doc.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
doc.OriginAtMargins = true;
doc.PrintPage += (sender, args) =>
{
Image i = Image.FromFile(imagePath);
//Point p = new Point();
args.Graphics.DrawImage(i, args.MarginBounds);
};
doc.Print();
}
出现的错误是:
std::map<CString, CString>* convertedNames;
BOOL CSome::SeekNameWithConversion(std::set<CString> names, CString nameToFind)
{
for (auto it = names.begin(); it != names.end(); ++it)
{
if (nameToFind.Compare(*it) == 0) return true;
auto convertedIt = convertedNames->find(*it);
if (convertedIt != convertedNames->end() &&
nameToFind.Compare(convertedIt->second) == 0)
return true;
CString justConvertedName = ConvertToTheOtherFormat(nameToFind);
convertedNames->insert(*it, justConvertedName); // Error here
return nameToFind.Compare(justConvertedName) == 0;
}
}
我想知道为什么操作员error C2675: unary '++':
'ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<_CharType>>>' does
not define this operator or a conversion to a type acceptable to the
predefined operator
在这里涉及,然后我应该如何处理这个错误。
答案 0 :(得分:1)
map::insert
的第一个参数是迭代器,而不是CString。在内部,该方法试图增加迭代器。这显然是打电话给operator++
。您不需要使用此插入过载。当您知道靠近元素插入位置的位置时,它旨在提高性能。只需拨打convertedNames->insert(std::make_pair(*it, justConvertedName))
即可。
答案 1 :(得分:0)
所以首先要理解的是模板总是在头文件中完全实现,因为所需的任何类都是用该对象构建的(只要想想std lib是否内置了所有可能的std :: vector实现!)
这意味着公开了模板的实现 - 在这种情况下,那里有一个++。如果你把整个错误打印出来(它会多出几行),你甚至可能会被告知你哪个参数出错了。
无论如何,我们可以看到*它显然是一个CString,但我猜这个
...转换为其他格式
可能没有回复你的想法
答案 2 :(得分:0)
std::map
的大多数insert
函数都需要迭代器。相反,你传递指向对象,(我想是CString
):
convertedNames->insert(*it, justConvertedName);
^^^
this is a CString, not a std::map<CString,CString>::iterator
如果您想插入一个键值对,请使用地图的value_type
代替基本上由键和值组成的std::pair
:
convertedNames->insert(std::make_pair(*it, justConvertedName));