2017-03-25 83 views
0

我想为矩阵设置一些重载运算符函数,我使用构造函数动态分配它们,并设置值的istream运算符。在尝试乘以两个矩阵时(运行时错误),我遇到了一个问题。运算符重载:多重矩阵

任何帮助,将不胜感激。 ps:我不熟悉模板。

这里是我的*运算符功能:

matrixType operator*(matrixType m) 
{ 
    if(Rows==m.Cols && Cols==m.Rows) 
    { 
     matrixType m3(Rows,m.Cols); 
     for(int i=0; i<Rows;i++) 
     { 
      for(int j=0; j<Cols; j++) 
      { 
       { 
        for(int g=0; g<Cols;g++) 
         m3.matrix[i][j]+=matrix[i][g] * m.matrix[g][j]; 
       } 
      } 
     } 
     return m3; 
    } 
} 

,这里是我的副本操作功能:

matrixType& operator=(matrixType& m) 
{ 
    for (int i =0; i<Rows; i++) 
    { 
     for (int j=0; j<Cols; j++) 
       matrix[i][j]=m.matrix[i][j]; 
    } 

    return *this; 
} 
+1

你不提任何有关错误的详细信息,但最常见的问题是没有按照“三治”(谷歌它)当你动态分配的成员。尽管使用'std :: vector'更好,因为它可以让你遵循“零规则”。 – molbdnilo

+0

你好,欢迎来到StackOverflow。请花一些时间阅读帮助页面,尤其是名为[“我可以询问什么主题?”(http://stackoverflow.com/help/on-topic)和[“我应该问什么类型的问题避免问?“](http://stackoverflow.com/help/dont-ask)。更重要的是,请阅读[Stack Overflow问题清单](http://meta.stackexchange.com/q/156810/204922)。您可能还想了解[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 –

回答

0

我认为,如果你当你运行该代码后的一些运行时错误可能会更好。无论如何,我发现在你的乘法运算符函数的一个问题:

当您返回立方米,则在另一个域中定义,所以它是没有定义,你怎么样把回报立方米语句,如果范围内:

matrixType operator*(matrixType m) 
{ 
    if(Rows==m.Cols && Cols==m.Rows) 
    { 
     matrixType m3(Rows,m.Cols); 
     for(int i=0; i<Rows;i++) 
     { 
      for(int j=0; j<Cols; j++){ 
        {for(int g=0; g<Cols;g++) 
        m3.matrix[i][j]+=matrix[i][g] * m.matrix[g][j];} 
     } 
     return m3; 
    } 
     // Throw some error if your assertion is not satisfied, perhaps 
    } 
} 
0

你在你的j循环使用错误Cols。你想m.Cols有:

for (for(int j=0; j<m.Cols; j++) 

看看那里的ijg变量用于下标,看看有什么极限值为3环。