C++ 调用模板函数错误

标签 c++ templates compiler-errors

尝试编译以下代码时:

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;
}

关于C++ 调用模板函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32878972/

相关文章:

compiler-errors - “' errno ' undeclared”编译Linux内核时

c++ - 这是什么=!运算符(operator)?

c++ - C++ 模板中的代码重用(或不重用)

c++ - 在模板中捕获异常类

c++ - 共享库中模板化类和 dynamic_cast 的显式实例化

c - 意外的文件结束错误,寻找常见原因但找不到任何

ios - 为 iOS 构建 Assimp

c++ - fftwf_execute_dft_c2r 写入输入缓冲区

c++ - 为什么在 lambda 中隐式捕获 const ints(或短裤)?

c++ - 使用 clang-format 3.6 的 cpp 模板 <> 间距未按预期工作