модульное тестирование — C ++ GoogleTest с использованием фикстуры — определение указателя функции недоступно

Я реализовал GoogleTest, с классом приспособления UnitTest_solver, Реализация для светильника заключается в следующем. Содержит вспомогательные функции

class UnitTest_solver : public ::testing::Test
{

protected:

static void SetUpTestCase()
{
// setup table with data
m_col = 2;
m_row = 100;
//  other things to initialize m_test_data
}static void TearDownTestCase()
{
for(int i = 0 ; i < m_row ; i++)
delete[] m_test_data[i];
delete[] m_test_data;
}static double chi_sqr(double* x)
{
if(m_col < 2)
return 0;

double fx = 0;

double * row_i = new double[m_col - 1];

for(int i = 0 ; i < m_row ; i++)
{
for(int j = 0 ; j < m_col - 1 ; j++)
row_i[j] = m_test_data[i][j];

fx += pow(m_test_data[i][0] - func_1(x, row_i, m_col - 1), 2.0);
}
return fx;
}static double func_1(double* x, double* dbl, int nb_param)
{
if(nb_param != 2)
return 0;

return x[0] * exp(-1 * x[1] * dbl[0]);
}

static double UnitTest_solver::functPtr( double * parameters, void * userinfo)
{
return  chi_sqr(parameters);
}

static ofstream thing;
static double** m_test_data;
static int m_col, m_row;

};

Кроме того, из области видимости я инициализирую статические переменные. Последний указатель на функцию. синтаксис определения в порядке?

double** UnitTest_solver::m_test_data = 0;
int UnitTest_solver::m_col = 0;
int UnitTest_solver::m_row = 0;

double (UnitTest_solver::*functPtr)(double * , void *) = 0;

Затем у меня есть тестовый пример со ссылкой на прибор UnitTest_solver.

TEST_F(UnitTest_solver, testFunc1)
{
Solver* solversqp = new Solver();
solversqp->set_pointer_to_function(UnitTest_solver::functPtr, (void*)0);
//...
}

вторая строка показывает ошибку времени компиляции с UnitTest_solver::functPtr : когда мышь находится над ошибкой, информация «функция, определенная в строке xxx, недоступна», где xxx указывает на functPtr определение внутри светильника.

Если я запускаю ggltest, комментируя последнюю строку, solversqp->set_pointer_to_function(UnitTest_solver::functPtr, (void*)0);тест заканчивается (если я поставил тривиальный ASSERT, он успешен).

Что не так с моим определением указателя функции.

0

Решение

Я не вижу полный код, поэтому это только предположение.

Все в class UnitTest_solver защищен, поэтому все (кроме классов, наследующих этот класс) не имеют доступа к его членам. Измените его на общедоступный, и ваша проблема будет решена:

class UnitTest_solver : public ::testing::Test
{

// protected:
public:
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]