模板类和主要

Posted

技术标签:

【中文标题】模板类和主要【英文标题】:Template Classes and main 【发布时间】:2012-09-30 12:58:12 【问题描述】:

我有以下类设置,尝试模仿一个非常基本的堆栈。

template <class T>
class Stack
    public:
        static const unsigned MAX_STACK_DEPTH =4;
        Stack();
        unsigned elements() const;
        Stack<T> & push(T &value);
        T pop();
        Stack<T> & show();
    private:
        unsigned element;
        T stack[MAX_STACK_DEPTH];
;

template <class T>
Stack<T>::Stack()
    element=0;

/*Other class function definitions*/

我的问题是我在 main 中收到以下错误

1   IntelliSense: no instance of function template "calc" matches the argument list c:\users\nima\documents\visual studio 2010\projects\calcu\calcu\policalc.cpp    109 6   Calcu

这是我的主要内容

int main()
    bool run=true;
    while(run)
        if(calc(input()));
    

这是另外两个函数声明

string input();
template <class T>
bool calc(string line);

这是我的 calc 函数,还没完成。

template <class T>
bool calc(string line)
    static T Ans;
    istringstream sin(line);
    Stack stack;
    for(string token; sin>>token)
        T t;
        if(parse(t, token))
            push(t);
        else
            if(token==operators[i])
                switch(i)
                case 1:

                       
                
            
        
    

【问题讨论】:

如果 calc() 没有在其签名中使用 T,为什么它被声明为模板函数?我没有看到您在 main 中使用类 Stack 的位置。 你提供的堆栈模板在这里没用。但没有提供有用的计算实现。 我用 calc 函数更新了帖子。这有帮助吗? :/ 对此感到抱歉。 编译器如何知道你想要 calc 调用的 T 的值是多少? 你确定你只有一个错误吗? 【参考方案1】:

您的calc 函数是一个带有参数T 的函数模板,但该参数不被任何函数参数使用——唯一的参数被定义为string,无论T 是什么类型是。

因此,当您像这样调用calc 时,编译器无法延迟T

calc(input())

您需要明确指定T,例如:

calc<int>(input())

(当然,您应该使用任何有意义的数据类型,而不是int。)

【讨论】:

我更新了我的帖子以表明我在函数中使用了 T。这会让事情变得更好吗? :// @NimaGanjehloo 不,很遗憾没有。只有将类型用作函数的参数,才能延迟该类型。在函数内部的某个地方使用它(或者甚至作为返回类型,但不是作为参数)是不够的。 在这种情况下,我将如何在 calc 函数中创建一个接受任何类型的变量? 嗯...我认为这里对模板是什么有一些误解。用于T 的类型必须在编译时已知。 (在您编写calc 时不需要知道它,但在您编写调用calc 的代码时,它必须被定义——或者以calc 的参数之一的形式,或者通过在我的回答中明确指定它。)只要考虑一下当编译器到达calc 中使用T 的点时应该做什么。它应该如何知道使用什么类型? 这解释了很多哈哈。看来我必须退后几步,重新考虑我正在做的一切。感谢您的帮助。

以上是关于模板类和主要的主要内容,如果未能解决你的问题,请参考以下文章

C++模板类和类模板

如何编写一个接受每个类和类模板的 C++ 模板?

具有本机 UML 类型的模板类和模板类的 OCL 约束

基础知识回顾——类和对象

类和对象之模板

模板类和向量