我在C++中的模板代码正在生成奇怪的错误,我似乎无法解决。

My template code in C++ is generating odd errors I can't seem to resolve.

本文关键字:错误 解决 C++ 代码 我在      更新时间:2023-10-16

我的代码中出现了一些错误,但我无法弄清楚它们。我将代码简化为非常基本的简单函数/类调用,但仍然有问题。

#include <iostream>
using namespace std;
template <class T> 
class FC
{
private: 
    double netprofit, costofinvest;
    double curras, invent, curliab;
public: 
    void ROI(double np, double ci)
    {
     netprofit = np; costofinvest = ci;
    }
    double getROI()
    {
     return (netprofit - costofinvest) / costofinvest;
    }
    void ATR(double ca, double inv, double cl)
    {
     curras = ca; invent = inv; curliab = cl;
    }
    double getATR()
    {
    return (curras - invent) / curliab;
    }
};

int main()
{
 FC ROI, AcidTestRatio; 
 ROI.ROI(27, 288);
 cout << ROI.getROI() << endl;
 AcidTestRatio.ATR(77, 2l, 344);
 cout << AcidTestRatio.getATR() << endl;

return 0;
}

我得到的错误如下所示:

In function 'int main()':
39:22: error: missing template arguments before 'ROI'
41:2: error: 'ROI' was not declared in this scope
44:2: error: 'AcidTestRatio' was not declared in this scope

你需要给出一个模板参数'T':

FC<float> ROI, AcidTestRatio; 

但正如 alain 指出的那样,您还没有使用 T,因此您不妨从代码开头删除template <class T>

或者,您可能希望使用 T 作为成员的类型,而不是 double

template <class T> 
class FC
{
private: 
    T netprofit, costofinvest;
    T curras, invent, curliab;
public: 
    void ROI(T np, T ci)
    {
     netprofit = np; costofinvest = ci;
    }
    T getROI()
    {
     return (netprofit - costofinvest) / costofinvest;
    }
    void ATR(T ca, T inv, T cl)
    {
     curras = ca; invent = inv; curliab = cl;
    }
    T getATR()
    {
    return (curras - invent) / curliab;
    }
};

更新: 完整示例在这里