从C ++中的友元函数访问私有成员时出错

时间:2016-09-11 19:42:30

标签: c++

我在重载'<<<'时遇到问题c ++中动态分配的Table类的运算符。

这是头文件:

#ifndef INT_TABLE_H
#define INT_TABLE_H

#include<cstdlib>
#include<iostream>

class Table {
public:
    Table();
    Table(int n);
    Table(const Table& orig);
    virtual ~Table();
    friend std::ostream& operator<<(std::ostream& out, const Table& t);

private:
    int** table;
    int rows;
    int cols;
};

#endif /* INT_TABLE_H */

这是有问题的功能:

std::ostream& operator<<(std::ostream& out, const Table& t)
{
    for(int i=0;i<t.rows;i++)
    {
        for(int j=0; j<t.cols; j++)
        {
            std::cout<<"["<<"."<<"]";
        }
        std::cout<<std::endl;
    }
}

当我运行代码时,我得到以下输出:

  1 [main] algproject1 6360 cygwin_exception::open_stackdumpfile: Dumping stack trace to algproject1.exe.stackdump
this is a table
[.][.][.][.][.]
[.][.][.][.][.]
[.][.][.][.][.]
[.][.][.][.][.]
[.][.][.][.][.]

RUN FAILED (exit value 35,584, total time: 1s)

表仍然打印,但我收到上述错误。 我发现当我用一个数字(例如5)替换t.rows和t.cols时,它运行正常没有问题。有谁知道问题是什么?动态内存分配对我来说是一个相对较新的概念。

另一个快速问题,我如何访问表格的元素进行打印?当我替换“。”使用t [0] [0],我收到以下错误:

int_table.cpp: In function 'std::ostream& operator<<(std::ostream&, const Table&)':
int_table.cpp:50:34: error: no match for 'operator[]' (operand types are 'const Table' and 'int')
             std::cout<<"["<<t[0][0]<<"]";
                              ^

非常感谢您提供的任何帮助或解释!

1 个答案:

答案 0 :(得分:1)

对于任何想知道的人,我都找到了问题。

在运营商&lt;&lt;函数我无法实际返回输出流     退出;

我应该看到一个简单的解决方案,但感谢输入!