我正在用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#中,如果我定义了一个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方面可能不那么重要.