我正在执行一项任务,我将获得初学者代码并要求填写。初学者代码有三个功能,要求我向项目添加varargs
并且它们都相似但是对于不同的多态对象。
48 void Library::addKeywordsForItem(const Item* const item, int nKeywords, ...)
49 {
50 // the code in this function demonstrates how to handle a vararg in C++
51
52 va_list keywords;
53 string keyword;
54 bool successFlag = false;
55 sArray keywordV;
56
57 va_start(keywords, nKeywords);
58 for (int i = 0; i < nKeywords; i++) //This code adds the items to a map of set to create a fast access structure for keyword searches
59 {
60 keyword = va_arg(keywords, string);
61 // do something with each keyword
62 keywordV.push_back(keyword); //pushes keyword onto vector
63 successFlag = addToSMap(item, keyword, keywordDbase); //This function is literally a copy/paste of the code
64 //originally designed for this function
65 }
66 va_end(keywords);
67
68 const Item item2 = *item; //pointless attempt to circumvent const
69
70 item2.setKeywords(keywordV); //sends finished and unsorted vector into item object
71
72 if(!successFlag) //Should never execute
73 cout << "This code reeks verily of wrongness.\n";
74 }
我的问题是函数参数指定了一个const对象指针,因此当我尝试调用setKeywords
时,我收到以下错误。
Library.cpp: In member function ‘void Library::addKeywordsForItem(const Item*, int, ...)’:
Library.cpp:70:28: error: passing ‘const Item’ as ‘this’ argument discards qualifiers [-fpermissive]
item2.setKeywords(keywordV); //sends finished and unsorted vector into item object
^
In file included from Library.h:9:0,
from Library.cpp:4:
Item.h:30:7: note: in call to ‘void Item::setKeywords(sArray&)’
void setKeywords(sArray& keywords); //Takes unsorted vector
^~~~~~~~~~~
我的问题是该程序的输出要求对象存储其关键字,以便我可以打印它。 我理解,const的全部要点是阻止我改变对象。
如果所有采用Item*
和varargs
的函数(这是唯一可以处理添加向量的函数)都是{{I>我应该如何添加输出所需的数据{ {1}}?有没有人有任何想法?
P.S。 const
是sArray
,这项任务是关于多态的。由于vector<string>
,我遇到了dynamic_cast的问题,但这是另一个问题。
编辑:我们没有明确禁止更改功能,但如果我这样做,那么提供的许多其他代码都会中断。
值得注意的是,此代码旨在在Visual Studio上运行,并在Vim上进行编辑。很可能教师很少或根本没有检查确保分配在Linux上运行。