тестирование — C ++ GoogleTest — ошибка статического члена и компоновщика LNK 2001

У меня есть этот пример кода, определяющий приспособление в googletest.

#include "solver.h"
#include <math.h>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;class UnitTest_solver : public ::testing::Test
{
protected:

static void SetUpTestCase()
{
// setup table with data
m_col = 2;
m_test_data = new double*[m_row];
for(int i = 0 ; i < m_col ; i++)
m_test_data[i] = new double[m_row];

ifstream data_x;
data_x.open("exponential2X.txt");

// etc... : i setup table m_test_data in a few more lines
}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, double(*func)(double*, double*, int))
{
if(ncol < 2)
return;

double fx = 0;

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

for(int i = 0 ; i < nrow ; i++)
{
for(int j = 0 ; j < ncol - 1 ; j++)
row_i[j] = data[i][j];

fx += pow(data[i][0] - (*func)(x, row_i, ncol - 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 warpPt2apply_func(double * parameters, int ncol, void * userinfo, int nb_p)
{
return  chi_sqr(parameters, (ncol - 1), (*func_1));
}

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

};TEST_F(UnitTest_solver, testFunc1)
{
Solver* solver = new Solver();
solver->set_pointer(warpPt2apply_func, (void*)NULL);
}

у меня ошибка LNK 2001, вероятно связанная с использованием статического члена данных, указывающего на членов m_test_data, m_col, m_row, это потому, что метод SetUpTestCase () вызывается для каждого нового теста в наборе тестов в начале, тогда как статический член должен быть инициализирован раз и навсегда.

Любая идея?

Спасибо

0

Решение

  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;
2

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

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

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