相关疑难解决方法(0)

如何正确地重载<<操作符为ostream?

我正在用C++编写一个小矩阵库来进行矩阵运算.然而,我的编译器抱怨,在它之前没有.这个代码留在架子上6个月,在我之间我将我的计算机从debian etch升级到lenny(g ++(Debian 4.3.2-1.1)4.3.2)然而我在具有相同g ++的Ubuntu系统上遇到了同样的问题.

这是我的矩阵类的相关部分:

namespace Math
{
    class Matrix
    {
    public:

        [...]

        friend std::ostream& operator<< (std::ostream& stream, const Matrix& matrix);
    }
}
Run Code Online (Sandbox Code Playgroud)

而"实施":

using namespace Math;

std::ostream& Matrix::operator <<(std::ostream& stream, const Matrix& matrix) {

    [...]

}
Run Code Online (Sandbox Code Playgroud)

这是编译器给出的错误:

matrix.cpp:459:错误:'std :: ostream&Math :: Matrix :: operator <<(std :: ostream&,const Math :: Matrix&)'必须只取一个参数

我对这个错误感到有些困惑,但是在6个月里做了大量的Java后,我的C++又变得有点生疏了.:-)

c++ iostream namespaces operator-overloading ostream

223
推荐指数
5
解决办法
36万
查看次数

我可以在C++结构上实现.ToString()以进行调试吗?

在C#中,如果我定义了一个struct,我也可以覆盖ToString().然后,当我正在调试并添加一个监视或将鼠标悬停在结构的实例上时,工具提示将是计算的ToString()而不是结构的类型名称.

我能以某种方式在C++和/或C++/CLI中这样做吗?也就是说,我可以将方法定义为结构的一部分(或做其他任何事情),这将导致watch-value/tooltip显示我选择的字符串?Visual Studio for C/C++中的默认字符串呈现是所有结构的字段值的列表(或者可以卡在小框中的数量).

我的类型都是C风格的结构.(在我将文件转换为.cpp并修复了一些类型问题之前,它实际上是用C编写的,所以我可以在CLI中运行它.)这是一个示例结构:

struct other_dollars_node
{
    struct other_dollars_node *next_other_dollars;
    override *overrides;    
    long     other_dollars_id;
    tm       effective_date;
    double   amount;
}
Run Code Online (Sandbox Code Playgroud)

我对C++/CLI的经验很少 - 我的大多数经验都是使用原生C/C++和C#.我正在使用Visual Studio 2013.

更新:由于几乎所有现有代码都使用本机C语法,而我更喜欢无需重构的解决方案,因此CLI方面可能不那么重要.

c c++ c++-cli visual-studio visual-c++

7
推荐指数
1
解决办法
1587
查看次数