В модульном тесте класса я пытаюсь объявить переменную класса, явно вызвав пустой конструктор и передав его в функцию, которая исключает ссылку на интерфейс типа, который я объявляю, но компилятор выдает ошибку,Когда я просто объявляю это без какого-либо явного вызова конструктора, функция принимает его.
См. Код ниже:
//classundertest.h
class IController;
class CClassUnderTest
{
public:
CClassUnderTest() {}
virtual ~CClassUnderTest() {}
unsigned int Run(IController & controller);
};
//testclassundertest.h
#include "UnitTest++.h"
#include "classundertest.h"
#include "icontroller.h"
class CTestController : public IController
{
public:
CTestController() : IController() {}
virtual ~CTestController() {}
virtual void Play(unsigned int i) {}
};
struct CClassUnderTestFixture
{
CClassUnderTest classUnderTest;
};
TEST_FIXTURE(CClassUnderTestFixture, RunTest)
{
CTestController controllerA;
CHECK_EQUAL(classUnderTest.Run(controllerA), 105U);
CTestController controllerB();
CHECK_EQUAL(classUnderTest.Run(controllerB), 105U);
}
Компилятор считает, что controllerB является ссылкой конструктора:
ошибка: нет соответствующей функции для вызова `CClassUnderTest :: Run (CTestController (&) ()) 'ошибка: кандидаты: unsigned int CClassUnderTest :: Run (IController &)
Меня смущает, почему компилятор не позволяет мне вызывать конструктор при создании экземпляра controllerB, особенно, когда рабочий код выглядит нормально с этим?