我是c ++的新手,所以我仍然不清楚如何将文件链接在一起等等。我正在做一个练习,其中有一个测试文件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("Tom-ay-to, tom-aaaah-to."));
}
在练习中,由我来写“bob.cpp”,所以我的问题是这样,我如何编写它以便它被测试文件识别?目前我在倒数第二行得到了“使用未声明的标识符'bob'”。我正在使用Xcode,我有一个bob.cpp和bob.h,几乎是空的。
感谢。
答案 0 :(得分:2)
当您看到类似
的内容时bob::hey("Tom-ay-to, tom-aaaah-to.")
bob
必须是bob.h
中声明的命名空间或类。该文件可以被调用任何东西 - 它不必匹配范围分辨率运算符::
左侧的内容。
你必须在其他地方(可能在bob.h
中)有一些看起来像这样的东西:
class bob
{
public:
static std::string hey(const std::string &s);
}
或者,可能性稍差,
namespace bob
{
std::string hey(const std::string &s);
}
这包含在bob_test.cpp
(通过您的#include "bob.h"
)预处理程序指令中。
/// bob.cpp
#include "bob.h"
#include <string>
std::string bob::hey(const std::string &s)
{
return "asdfasdfasdf";
}
标题,如bob.h
,包含基本上是接口定义的内容(尽管它们也可能包含实现 - 这是另一个讨论)。声明
#include "bob.h"
告诉编译器,在编译期间,它应该打开bob.h
,直接粘贴该文件的内容代替#include
指令,然后编译.cpp
,就好像你有将标题的内容放在cpp中。
如果您正在尝试将这些东西传授给自己,请恭喜并坚持下去!
如果这是家庭作业,我建议你去办公时间,抓一块白板,并向老师提问,直到明确为止。教师的工作是让这些东西尽可能清晰和平易近人。 (我教 - 让事情变得清晰并不容易,我欢迎来自我的学生的问题。最终,我希望我的所有学生都能理解并热爱他们所做的事。)