Tôi đến với bạn cho một vấn đề lạ khi tôi sử dụng Visual Studio Native Unit Test trên VS 2012. Tôi đã là một tọa độ lớp như thế:VS2012: Lỗi với kiểm tra đơn vị: Assert :: AreEqual (đối tượng, đối tượng) không hoạt động
#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;
};
}
Vì vậy, vấn đề xuất hiện khi tôi sử dụng: Khẳng định :: AreEqual (Tọa độ (0,0), Tọa độ (0,0));
Lỗi được gửi là: Lỗi 1 lỗi C2678: nhị phân '==': không tìm thấy toán tử bên trái. \ Program files (x86) \ microsoft visual studio 11.0 \ vc \ unittest \ include \ cppunittestassert.h 129 1 UnitTest1
Bạn có ý tưởng sửa lỗi đó không?
PS: Xin lỗi vì tiếng anh của tôi, không phải là ngôn ngữ mẹ đẻ của tôi.
Lỗi lỗi C2338: Kiểm tra nhà văn phải xác định chuyên môn của ToString cho std lớp lớp học của bạn :: basic_string , lớp std :: cấp phát > __cdecl Microsoft :: VisualStudio :: CppUnitTestFramework :: ToString (const class Core :: Coordinates &). \t c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ unittest \ include \ cppunittestassert.h UnitTest1 –
Winter
Chỉ cần thêm vào đó, cho bất kỳ quá tải phương thức/hàm/toán tử nào không thay đổi đối tượng hiện tại và bất kỳ tham số nào mà bạn không có ý định thay đổi phải được đánh dấu bằng một const. –
Và trừ khi có lý do để tạo bản sao, hãy đi với 'toán tử bool == (const Tọa độ & tọa độ) const' – Mordachai