template < class A, class B, class C> class Matrix
{
public:
typedef map<B,C> M2; // for putting 1D info
typedef map<A,M2> M1;
map<M1, M2 > data;
M1 m1;
M2 m2;
typedef typename map<B,C>::iterator iterator2;
iterator2 itr2;
typedef typename map<A,M2>::iterator iterator1;
iterator1 itr1;
Matrix() // default constructor
{
m2.insert(pair<int,double> (1,10));
m2.insert(pair<int,double> (2,20));
m2.insert(pair<int,double> (3,30));
m1.insert(pair <int, M2> (1,m2));
m2.clear();
m2.insert(pair<int,double> (1,40));
m2.insert(pair<int,double> (2,50));
m2.insert(pair<int,double> (3,60));
m1.insert(pair <int, M2> (2,m2));
m2.clear();
m2.insert(pair<int,double> (1,70));
m2.insert(pair<int,double> (2,80));
m2.insert(pair<int,double> (3,90));
m1.insert(pair <int, M2> (3,m2));
m2.clear(); }
Matrix(const map<M1, M2>& ar) //copy constructor
{ m1 = ar.m1; }
Matrix<A, B, C >& operator = (const Matrix<A, B, C >& ass) //assignment
{ if (this==&ass) return *this;
m1 = ass.m1; return *this; }
const C& operator () ( int& index1, int& index2 ) //for accessing/modifying data
{ itr1 = m1.begin();
advance(itr1, index1 - 1);
m2 = (*itr1).second;
itr2 = m2.begin();
advance(itr2, index2 - 1);
return (*itr2).second; }
};
int main()
{
Matrix <int,int,double> mtr;
cout<< mtr(2,2);
return 0;
}
如果我编译上面的程序,我收到以下错误“cannot convert 'Matrix<int, int, double>' to 'double' in assignment.
”
我认为我尝试重载操作符的方式存在问题,但到目前为止还无法解决...
我知道这不是创建矩阵的有效方法,但由于我是初学者,如果你能帮我理解这段代码背后的问题会有所帮助......
问题解决了! 感谢
答案 0 :(得分:2)
这可能无法解决您的所有问题,但这是一个悬而未决的问题:
Matrix <int,int,double> mtr();
这行代码不符合你的想法。它没有定义对象mtr
,而是声明了返回Matrix <int,int,double>
类型的函数。
定义对象mtr
Matrix <int,int,double> mtr;
另外,map迭代器不是random_access_iterator,你不能做
itr2 = m2.begin()+index2-1;
尝试:
itr2 = std::advance(m2.begin(), index2 - 1);