模板函数错误:找不到哪个操作符采用类型的右手操作数

时间:2010-09-03 16:53:14

标签: c++

喂!看看下面的例子..它几乎是一些cpp书的复制粘贴。 我无法理解为什么不编译(在Windows下)。 它说:

'<<' : no operator found which takes a right-hand operand of type 'div_t' (or there is no acceptable conversion)  

这是一个例子:

#include <iostream>

template <class T>
T div(T a, T b) {
    T result =  a/b;
    return result;
}

int main() {    
    int a = 5;
    int b = 3;
    std::cout << "INT " << div(a,b) << std::endl; //this line output the error

    return 0;
}

谢谢!

1 个答案:

答案 0 :(得分:5)

div是一个标准库函数,它返回div_t类型的值。当您加入<iostream>时,您显然也间接包含了标准div的声明。这是编译器尝试使用的,而不是模板版本。

这可能是实现的错误,而不是您的错(假设您发布的代码是您尝试编译的确切代码)。如果它们在<iostream>中包含标准库的那一部分,那么他们可能应该以标准div成为std::div的方式完成它。如果他们这样做,你就不会有这个问题。

你可以做到

std::cout << "INT " << div<>(a,b) << std::endl;

明确要求编译器使用您的模板。