Как использовать QCOMPARE с двумя пользовательскими классами в пользовательском пространстве имен?
У меня есть класс MyClass в пространстве имен MyNameSpace, и я определяю оператор == в тестовом модуле, так что классы могут быть переопределены.
Модульный тест не "компилируется", потому что отсутствует оператор == match для const MyNameSpace Myclass, MyNamespace MyClass, даже если он у меня есть в модульном тесте.
Без использования пространства имен работает как положено.
Допустим, у нас есть:
namespace MyNamespace {
class MyClass {
public :
QString a;
};
}
и в тестовом блоке:
....
#include "myclass.h"
using namespace MyNamespace;
....
test_case1 {
MyClass myClass;
myClass.a = "test";
MyClass myClass2;
myClass2.a = "test";
QCOMPARE(myClass, myClass2); //Fails to compile
}
operator==(const MyNamespace::MyClass &class1, const MyNamespace::MyClass &class2) {
return (class1.a == class2.a);
}
1 ответ
Я решил, поместив определение оператора == в пространство имен std
namespace std {
bool operator==(const MyNamespace::MyClass class1, const MyNamespace::MyClass class2)
{
return (class1.a == class2.a);
}
}