Как использовать 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);       
    }
}
Другие вопросы по тегам