当我在VS 2012上使用Visual Studio Native Unit Test时,我找到了一个奇怪的问题。 我有一个类似的坐标课:
#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:对不起我的英语,不是我的母语。
答案 0 :(得分:18)
创建赋值运算符后收到的错误,即
错误1错误C2338:测试编写者必须为您的类类std :: basic_string定义ToString的特化,类std :: allocator&gt; __cdecl Microsoft :: VisualStudio :: CppUnitTestFramework :: ToString(const class Core :: Coordinates&amp;)。
与需要为单元测试提供打印出预期和接收的值的方法有关。您可以通过在Microsoft::VisualStudio::CppUnitTestFramework
命名空间中创建ToString函数的模板特化来完成此操作。例如:
namespace Microsoft{
namespace VisualStudio {
namespace CppUnitTestFramework {
template<>
static std::wstring ToString<Coordinates>(const Coordinates & coord) {
return L"Some string representing coordinate.";
}
}
}
}
之后,应该运行单元测试。
答案 1 :(得分:0)
鉴于错误消息,您可以尝试使您的运算符==更友好:
bool operator==( const Coordinates coordinates ) const;