【问题标题】:error C2955 and error C2244 using C++ template错误 C2955 和错误 C2244 使用 C++ 模板
【发布时间】:2013-02-28 06:36:42
【问题描述】:

我开始学习 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;
}

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

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

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

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

    【讨论】:

    • 这和他用的有什么区别?
    • @Aniket,T参数呢?
    • 哦对了,他贴了两个代码。我正在看第二个,试图弄清楚它有什么问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2012-10-04
    • 1970-01-01
    相关资源
    最近更新 更多