【发布时间】:2014-11-29 10:59:48
【问题描述】:
我正在开展一个项目,该项目读取食谱并将其与您的储藏室中的食物(用户定义)进行比较。
我希望通过在线搜索减少了大部分问题,但有一个问题特别烦人。
每当我设置一个迭代器 list::iterator listThatIsInClass;等于开始或结束,Visual Studio Express 2013 给了我一个 C3867 错误。执行逻辑运算时也会出现C2678错误,小于等。
下面是一个不起作用的功能
void extractData::compareInventoryRecipe()
{
string recipIng = " ";
string invenIng = " ";
double recipAm = 0;
double invenAm = 0;
double x = 0;
double y = 0;
list<int>::iterator invenIterAmount;
invenIterAmount = inventoryAmount.begin;
list<int>::iterator recipeIterAmount;
recipeIterAmount = recipeAmount.begin;
for (list<int>::iterator recipeIter = recipeFoodName.begin; recipeIter != recipeFoodName.end; ++recipeIter)
{
++recipeIterAmount;
for (list<int>::iterator invenIter = inventoryItem.begin; invenIter != inventoryItem.end; ++invenIter)
{
++invenIterAmount;
recipIng = *recipeIter;
invenIng = *invenIter;
recipAm = *recipeIterAmount;
invenAm = *invenIterAmount;
if (recipIng.compare(invenIng) == 0)
{
if (invenAm < recipAm)
{
x += (invenAm / recipAm);
neededAmount.push_back(invenAm - recipAm);
neededItem.push_back(invenIng);
}
else
{
x += 1;
recipeFoodName.remove(invenIng);
recipeAmount.remove(invenAm);
}
break;
}
else
continue;
}
y += 1;
}
setPercentOnHand((x * 100) / y);
}
下面是头文件。如您所见,所有列表都处于受保护状态,因为之前存在一个问题,即函数无法私下访问它们。
class extractData
{
protected:
list<string> recipeMeasurmentType
list<string> recipeFoodName;
list<double> recipeAmount;
list<string> inventoryItem;
list<double> inventoryAmount; // do i need regular int and string as well?
list<string> neededItem;
list<double> neededAmount;
list<string> measurmentLetter;
private:
string recipeTitle;
int choice;
double percentOnHand;
我确实尝试过制作一个包含迭代器的模板(我对此不是很有经验)。下面是模板,我不知道如何处理它。它是头文件中的公共类。
template <class T>
void iterators(list<T> data)
{
typename list<T>::iterator begin();
typename list<T>::iterator end();
typename list<T>::const_iterator begin() const;
typename list<T>::const_iterator end() const;
}
有人可以帮我解决这个问题吗?谢谢。
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
-
std::vector
应该是默认容器,除非您有理由选择其他内容。
标签: c++ list templates visual-studio-2013 stl