【发布时间】:2022-01-05 23:27:52
【问题描述】:
我正在编写一个程序来使用向量实现队列。我正在使用该类作为模板。在主函数中,我试图根据模板数据类型创建字符串向量和 int 向量。但是我从向量分配方法中得到编译错误。
template <class T>
class queueWithArray {
private:
vector<T> queueArray;
int numberOfElements;
int size;
int head;
int tail;
public:
queueWithArray(int n) {
numberOfElements = 0;
head = -1;
tail = -1;
size = n;
if(is_same<T,string>::value) {
cout << "data type is string" << endl;
queueArray.assign(n,"");
} else {
queueArray.assign(n,0);
}
}
...
int main() {
string InputArray[] = {"to", "be", "or", "not", "to", "-", "be", "-", "-", "that", "-", "-", "-", "is"};
queueWithArray<string> obj(2);
for(auto i=0; i < (signed int)(sizeof(InputArray)/sizeof(InputArray[0])); ++i) {
if(InputArray[i] == "-") {
string item = obj.dequeue();
cout << "dequeue->" << item << endl;
} else {
obj.enqueue(InputArray[i]);
cout << "enqueue->" << InputArray[i] << endl;
}
obj.printQueue();
}
int InputArray_int[] = {10,20,30,40,50,-1,20,-1,-1,60,-1,-1,-1,70};
queueWithArray<int> obj_int(2);
for(auto i=0; i < (signed int)(sizeof(InputArray_int)/sizeof(InputArray_int[0])); ++i) {
if(InputArray_int[i] == -1) {
int item = obj_int.dequeue();
cout << "dequeue->" << item << endl;
} else {
obj_int.enqueue(InputArray_int[i]);
cout << "enquque->" << InputArray_int[i] << endl;
}
obj.printQueue();
}
return 0;
}
..\QueueUsingTemplate.cpp:135:31:从这里需要 ..\QueueUsingTemplate.cpp:45:4: 错误:没有匹配函数调用 >'std::vector::assign(int&, const char [1])' queueArray.assign(n,""); ^~~~~~~~~~ 在 c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\vector:64:0 包含的文件中, 来自 c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\queue:61, 来自 c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\mingw32\bits\stdc++.h:86, 来自 ..\QueueUsingTemplate.cpp:18: c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_vector.h:489:7: 注意:候选:void >std::vector<_tp _alloc>::assign(std: :vector<_tp _alloc>::size_type, const value_type&) [with >_Tp = int; _Alloc = std::allocator; std::vector<_tp _alloc>::size_type = unsigned int; >std::vector<_tp _alloc>::value_type = int] 分配(size_type __n,常量 value_type& __val) ^~~~~~
【问题讨论】:
-
这不足以作为minimal reproducible example,因为未指定包含。
-
你需要
if constexpr ( std::is_same ... ) -
你可以
queueArray.assign(n, T{});