Я делаю упражнения на C++, которые используют Boost для проверки кода. У меня есть 3 файла, bob.cpp
, bob.h
и bob_test.cpp
(все ниже). Без классов я могу заставить тесты работать нормально. Но когда мне нужно проверить метод класса, как и в bob_test.cpp
, который пытается проверить bob::hey([arg])
, то я получаю ошибку:C++ Boost.Test - Где должен быть создан объект класса для тестирования его метода?
error: cannot call member function ‘std::__cxx11::string bob::hey()’ without object
Так что я явно нужно создать экземпляр bob
где-то (Ex: bob bob;
... Я Бесполезный 't выбрать имена), но я просто не могу понять, где это сделать. Рамка тестирования Boost обеспечивает собственную функцию main
(что означает, что я не предоставляю ее), поэтому я не могу ее там делать, и я ожидал, что Boost будет создавать экземпляр самого объекта, но это не похоже. Я пробовал вставить bob bob;
в bob_test.cpp
и bob.cpp
, что привело к такой же ошибке. Мой вопрос: где я должен создать экземпляр объекта bob
, который можно использовать в bob_test.cpp
? Будучи C++ noob, моя кишка говорит, что это должно быть в bob_test.cpp
, но я также довольно уверен, что я не должен редактировать этот файл.
bob.cpp
#include "bob.h"
#include <iostream>
#include <string>
using namespace std;
string bob::hey() {
return "Whatever.";
}
bob.h
#include <iostream>
#include <string>
// bob.h
class bob {
public:
std::string hey();
};
bob_test.cpp (только предоставление первый тест (упрощенный) вызывает ошибку, фактическое испытание немного отличается, я просто хочу настроить работу)
#include "bob.h"
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(stating_something)
{
BOOST_REQUIRE_EQUAL("Whatever.", bob::hey());
}
Это не ответ на вопрос, но я нашел обходной путь, где я использую пространство имен боб {} вместо класса боб, в обоих bob.h и bob.cpp файлах. – Totem
Еще лучше обходной путь, хотя и не совсем ответ, объявляет статический метод класса. Таким образом, мне не нужно создавать объект, и это позволило мне продолжить тестирование. – Totem