这是我的模板矩阵类:
template<typename T>
class Matrix
{
public:
....
Matrix<T> operator / (const T &num);
}
然而,在我的Pixel类中,我根本没有定义Pixel / Pixel运算符!
为什么在这种情况下,编译器仍然编译?
像素类
#ifndef MYRGB_H
#define MYRGB_H
#include <iostream>
using namespace std;
class Pixel
{
public:
// Constructors
Pixel();
Pixel(const int r, const int g, const int b);
Pixel(const Pixel &value);
~Pixel();
// Assignment operator
const Pixel& operator = (const Pixel &value);
// Logical operator
bool operator == (const Pixel &value);
bool operator != (const Pixel &value);
// Calculation operators
Pixel operator + (const Pixel &value);
Pixel operator - (const Pixel &value);
Pixel operator * (const Pixel &value);
Pixel operator * (const int &num);
Pixel operator / (const int &num);
// IO-stream operators
friend istream &operator >> (istream& input, Pixel &value);
friend ostream &operator << (ostream& output, const Pixel &value);
private:
int red;
int green;
int blue;
};
#endif
答案 0 :(得分:7)
C ++模板在您使用它们时实例化,这也适用于Matrix<T>::operator/(const T&)
。这意味着编译器将允许Matrix<Pixel>
,除非您调用除法运算符。
答案 1 :(得分:0)
1)您没有提供Matrix运算符的主体,因此可能不需要Pixel / Pixel运算符。
2)Afaik,模板方法不会生成编译错误,除非您在代码中的某处调用它们。不知道这是否是标准的,但某些版本的MSVC就是这样做的。做
Matrix m;
Pixel p;
m = m/p
代码中的某处,看看会发生什么。