c++ - 使用 C++ 模板时出现错误 C2955 和错误 C2244

标签 c++ templates

我开始学习 C++ 模板。 现在,我正在尝试编译 C++ 模板的简单示例。

#include <iostream.h>
template <class T> class pair1 {
     T value1, value2;
public:
    pair1 (T first, T second) {
        value1=first;
        value2=second;
    }
    T getmax ();
};

template <class T> 
T pair1::getmax (){
     T retval;
    retval = value1>value2? value1 : value2;
    return retval;
}
int main(){
     pair1<int> myobject (100, 75);
    cout << myobject.getmax()<<endl;
system("pause");
return 0;
}

我发生了以下 2 个错误:

  • (1) 错误 C2955:“pair1”:模板的使用需要模板参数 列表
  • (2) 错误 C2244:'pair1::getmax':无法匹配函数 现有声明的定义

我使用的是 Visual Studio 2010。

当如下使用内联函数时,它工作正常:

#include <iostream.h>
template <class T> class pair1 {
     T value1, value2;
public:
    pair1 (T first, T second) {
        value1=first;
        value2=second;
    }
   **T getmax (){ T retval;
retval = value1>value2? value1 : value2;
return retval;};**
};


int main(){
     pair1<int> myobject (100, 75);
    cout << myobject.getmax()<<endl;
system("pause");
return 0;
}

但是,我不喜欢在这种情况下使用内联函数, 希望任何人都可以告诉第一 block C++ 模板代码有什么问题。

最佳答案

你应该为类使用模板参数。

template <class T> 
T pair1<T>::getmax (){
     T retval;
    retval = value1>value2? value1 : value2;
    return retval;
}

关于c++ - 使用 C++ 模板时出现错误 C2955 和错误 C2244,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15129038/

相关文章:

c++ - 从 Visual Studio 2017 运行 CMake 的 PACKAGE 目标

c++ - 如何将二维 thrust::device_vector<thrust::device_vector<int>> 转换为原始指针

c++ - 从数组中删除对象

C++如何将 map 迭代器仅公开给 map 的值

C++ 模板运算符重载不起作用

c++ - 推导模板参数表达式的类型

c++ - 将 bool /整数数组传递给应该改变它的函数

C++检查一个 vector 中的值是否存在于另一个 vector 中

c++ - 一个类如何继承自己?

c++ - 模板和字符串文字和 UNICODE