我正在做使用 Boost 来测试代码的 exercism.io C++ 挑战。我有 3 个文件,bob.cpp
、bob.h
和bob_test.cpp
(都在下面)。没有课程,我可以让测试运行良好。但是一旦我需要测试一个类方法,比如bob_test.cpp
尝试测试的 in ,bob::hey([arg])
我就会得到错误:
error: cannot call member function ‘std::__cxx11::string bob::hey()’ without object
所以我显然需要在bob
某个地方实例化(例如:bob bob;
......我没有选择名称)但我就是不知道在哪里做。Boost 测试框架提供了它自己的main
功能(这意味着我不提供),所以我不能在那里做,我有点期望 Boost 会实例化对象本身,但它似乎没有。我尝试插入bob bob;
并bob_test.cpp
导致bob.cpp
相同的错误。我的问题是,我应该在哪里实例化一个bob
可以用于的对象bob_test.cpp
?作为一个 C++ 菜鸟,我的直觉说它应该在 . bob_test.cpp
,但我也很有信心我不应该编辑那个文件。
鲍勃.cpp
#include "bob.h"
#include <iostream>
#include <string>
using namespace std;
string bob::hey() {
return "Whatever.";
}
鲍勃.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());
}