模板类和类属性也是模板

时间:2010-02-02 17:34:13

标签: c++ templates operator-overloading

我在编译以下标题时遇到问题。这是我第一次使用模板,我想我得错了。编译器指出vector<vector<T>> data_;处的错误和运算符重载函数。我希望data_向量与OptBaseMatrix对象具有相同的类型,但我不知道该怎么做...我真的不知道如何解决这个问题。救命啊!

#ifndef OPTBASEMATRIX_H
#define OPTBASEMATRIX_H

#include <vector>

template<typename T>
class OptBaseMatrix 
{ 
public:
 vector<vector<T>> data_; 

 OptBaseMatrix(int rows, int cols);
 ~OptBaseMatrix();

 void readMatrix();
 void printMatrix();
 int getRows();
 int getCols();

    OptBaseMatrix<T> operator+(const OptBaseMatrix<T>& matrix1, const OptBaseMatrix<T>& matrix2);

private:
 int rows_; 
 int cols_; 
};

#endif // OPTBASEMATRIX_H

更新:以下是调试器日志中的代码段:

Error   1   error C2143: syntax error : missing ';' before '<'  optbasematrix.h 17  TD2
Error   2   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   optbasematrix.h 17  TD2

我尝试过修改vector&gt;数据_;通过矢量&gt;数据_;仍然得到相同的错误:/我在某处读到我的模板类标题(.h)和实现(.cpp)必须在同一个文件中......这可能是相关的吗?

更新2 :哇!我忘了“使用namespace std;”。问题现在似乎已经解决了!

2 个答案:

答案 0 :(得分:8)

您需要在两个>之间添加一个空格。

 vector<vector<T> > data_;

如果没有空格,>>将被视为流提取/右移运算符。

此外,您需要将operator+声明为自由函数,或者必须仅使用一个参数声明它:

// Member function
Matrix<T> operator+(const Matrix<T>& other) const;

// Free function (`friend` makes the function free
// even though it's declared within the scope of the class definition)
friend Matrix<T> operator+(const Matrix<T>& lhs, const Matrix<T>& rhs);

答案 1 :(得分:2)

尝试:

vector<vector<T> > data_;