c++调用模板函数错误
C++ Calling Template Function Error
当尝试编译以下代码时:
int main(){
Array<int> *testArray = new Array<int>(5);
testArray->initArray<int>(testArray);
testArray->printArray<int>(testArray);
return 0;
}
使用这个模板:
template<typename T>
class Array{
public:
Array(int size){
size = size;
data = new T[size];
};
Array<T> addData(T dataToAdd){
Array <T> *tmp = new Array <T> (this->size);
tmp = this->data;
Array <T> *newData = new Array<T> (this->size + 1);
for (int i = 0; i < this->size + 1; ++i){
if (i < this->size){
newData->data[i] = tmp[i];
}
else{
newData->data[i] = dataToAdd;
}
}
return newData;
};
void initArray(T arrayToInit){
for (int i = 0; i < this->size; ++i){
this->data[i] = i;
}
};
void printArray(T arrayToPrint){
ostringstream oss;
string answer = "";
for (int i = 0; i < arrayToPrint->size; ++i){
oss << arrayToPrint[i] + " ";
}
answer = oss.str();
cout << answer << endl;
};
private:
int size;
T* data;
};
我在int main()中得到以下错误:
"在' int '之前预期的主表达式"
用于我的函数调用(initArray和printArray)。我对c++还是个新手,尤其是模板方面的经验很少,任何建议都将是非常感谢的。谢谢你的宝贵时间。
编辑:感谢大家的回复和建设性的批评,感谢大家的帮助,我已经取得了很大的进步。
在这种情况下,不需要<int>
来调用该函数。(考虑std::vector<int>
,你应该写hoge.push_back(0)
而不是hoge.push_back<int>(0)
)
Array::initArray
和Array:;:printArray
的参数也是无效且不需要的。
修复代码(不发出编译错误/警告,但不能正常工作):
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
template<typename T>
class Array{
public:
Array(int size){
size = size;
data = new T[size];
};
Array<T> addData(T dataToAdd){
Array <T> *tmp = new Array <T> (this->size);
tmp = this->data;
Array <T> *newData = new Array<T> (this->size + 1);
for (int i = 0; i < this->size + 1; ++i){
if (i < this->size){
newData->data[i] = tmp[i];
}
else{
newData->data[i] = dataToAdd;
}
}
return newData;
};
void initArray(){
for (int i = 0; i < this->size; ++i){
this->data[i] = i;
}
};
void printArray(){
ostringstream oss;
string answer = "";
for (int i = 0; i < this->size; ++i){
oss << data[i] + " ";
}
answer = oss.str();
cout << answer << endl;
};
private:
int size;
T* data;
};
int main(){
Array<int> *testArray = new Array<int>(5);
testArray->initArray();
testArray->printArray();
return 0;
}
下面是修改后的工作代码:
#include <string>
#include <iostream>
#include <cstdint>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
template<typename T>
class Array{
public:
Array(int size){
size = size;
data = new T[size];
}
Array<T> addData(T dataToAdd){
Array <T> *tmp = new Array <T> (this->size);
tmp = this->data;
Array <T> *newData = new Array<T> (this->size + 1);
for (int i = 0; i < this->size + 1; ++i){
if (i < this->size){
newData->data[i] = tmp[i];
}
else{
newData->data[i] = dataToAdd;
}
}
return newData;
}
void initArray(Array<T>* arrayToInit){
for (int i = 0; i < this->size; ++i){
this->data[i] = i;
}
}
void printArray(Array<T>* arrayToPrint){
ostringstream oss;
string answer = "";
//for (int i = 0; i < arrayToPrint->size; ++i){
// oss << data[i] + " ";
answer = oss.str();
cout << answer << endl;
}
private:
int size;
T* data;
};
int main()
{
string s;
double d =9.0;
s=d;
Array<int> *testArray = new Array<int>(5);
testArray->initArray(testArray);
testArray->printArray(testArray);
return 0;
}
执行的更改:
模板实例化发生在声明类的时候。无需为其成员函数再次执行此操作。
也不需要追加;在每个成员函数定义之后,只需要定义类
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- C++:用户定义的显式类型转换函数错误
- C++ 合并字符串以'system'函数错误
- C++ wmain 函数错误时使用 Unicode
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- 线程 std::调用未知类型,无法专门化函数错误
- 表单显示对话框函数错误,并且不执行下面的语句
- 函数错误 C2059:语法错误:'>'不起作用
- STL向量上出现奇怪的复制构造函数错误
- C++ Visual Studio 重载函数错误:没有重载函数的实例与指定的类型匹配
- C++引用已删除函数错误
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- C++ 乘法定义的构造函数错误消息似乎错误
- 在 c++ 代码中将数组传递给函数错误
- FFMPEG avcodec_decode_video2函数错误代码
- 为什么我会收到转换函数错误