喂!看看下面的例子..它几乎是一些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;
}
谢谢!
答案 0 :(得分:5)
div
是一个标准库函数,它返回div_t
类型的值。当您加入<iostream>
时,您显然也间接包含了标准div
的声明。这是编译器尝试使用的,而不是模板版本。
这可能是实现的错误,而不是您的错(假设您发布的代码是您尝试编译的确切代码)。如果它们在<iostream>
中包含标准库的那一部分,那么他们可能应该以标准div
成为std::div
的方式完成它。如果他们这样做,你就不会有这个问题。
你可以做到
std::cout << "INT " << div<>(a,b) << std::endl;
明确要求编译器使用您的模板。