【问题标题】:My template code in C++ is generating odd errors I can't seem to resolve.我在 C++ 中的模板代码产生了我似乎无法解决的奇怪错误。
【发布时间】:2015-06-30 15:16:24
【问题描述】:

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

#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,你可以删除template&lt;class T&gt;这一行
  • 修改代码看起来像这样 void ROI(T np, T ci)void ATR(T ca, T inv, T cl) 并不能修复 main 中出现的错误。
  • @YelizavetaYR 还有其他相关代码你没有在这里显示。
  • @πάνταῥεῖ 还有许多其他功能,但都是半独立的。任务是创建一系列可以使用任何传递的数据类型的模板类。这就是我试图仅对 ROI 和 ATR 功能做的事情

标签: c++ function class templates


【解决方案1】:

你需要给一个模板参数“T”:

FC<float> ROI, AcidTestRatio; 

但正如 alain 指出的那样,您还没有使用 T,因此您也可以改为从代码的开头删除 template &lt;class T&gt;

或者,您可能希望使用 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;
    }
};

更新Full example here

【讨论】:

  • 你能解释一下这是什么意思吗——据我所知,为了模板化数据类型,你需要添加这一行代码template &lt;class T&gt;,然后使用 T,有或没有 T 定义代码不起作用。
  • 模板的重点是创建一个只有轻微变化的类(或函数)的版本(例如,可以存储整数或浮点数的存储类)。从阅读《C++ 之旅》一书开始,stackoverflow.com/questions/388242/…
  • 正确,但是您的代码行表明它是一个浮点数,我们希望将其设置为泛型类型,它可以是任何取决于运行时间的类型。 (链接将我带到一本书,我有书,我有阅读材料)
  • 带有建议的更改 - 即使我将所有内容都设置为 T(我在某个时候做了然后改回来),我仍然会收到完全相同的错误消息。全部来自主要。 (你的建议确实解决了它)但我不确定我理解为什么我需要那个
  • "一个泛型类型它可以是任何东西,取决于运行时间":.那么模板不是你所追求的......模板是在编译时完全确定或指定的。你可以有 FC 或 FC 但不能有 FC.
猜你喜欢
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 2022-11-21
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
相关资源
最近更新 更多