我在VS 2012上使用Visual Studio Native Unit Test时遇到了一个奇怪的问题。 我有一个坐标类这样的:VS2012:单元测试错误:Assert :: AreEqual(object,object)不起作用
#ifndef COORDINATES_HPP
#define COORDINATES_HPP
#include <iostream>
namespace Core {
class Coordinates {
public:
Coordinates();
Coordinates(int x, int y);
Coordinates(const Coordinates ©);
~Coordinates();
void operator=(Coordinates coordinates);
void operator+=(Coordinates coordinates);
void operator-=(Coordinates coordinates);
Coordinates operator+(Coordinates coordinates);
Coordinates operator-(Coordinates coordinates);
bool operator==(Coordinates coordinates);
bool operator!=(Coordinates coordinates);
int getX() const { return m_x; }
int getY() const { return m_y; }
void setX(const int &val) { m_x = val; }
void setY(const int &val) { m_y = val; }
protected:
int m_x, m_y;
};
}
所以,当我使用的问题出现: 断言:: AreEqual(坐标为(0,0),(0,0));
发送的错误是: 错误1错误C2678:二进制'==':找不到操作符找到类型为'const Core :: Coordinates'的左手操作数(或者没有可接受的转换)c: \ program files(x86)\ microsoft visual studio 11.0 \ vc \ unittest \ include \ cppunittestassert.h 129 1 UnitTest1
你有解决这个问题的想法吗?
PS:对不起,我的英语,不是我的母语。
错误错误C2338:测试作家必须定义的ToString专业化为你的类类的std :: basic_string的,一流的std ::分配器> __cdecl微软的VisualStudio :: :: CppUnitTestFramework :: ToString (const class Core :: Coordinates&)。 \t C:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ unittest \ include \ cppunittestassert.h 1单元测试1 –
Winter
2013-05-01 03:47:55
只是为了补充说明,对于任何不改变的方法/函数/运算符重载当前对象和任何你不打算改变的参数应该用一个const标记。 – 2013-05-01 03:48:39
除非有理由创建副本,否则请使用'bool operator ==(const Coordinates&coordinates)const' – Mordachai 2013-05-01 03:54:43