尽管包含test.hpp,xyz.cpp现在为test.hpp中定义的每个变量抛出一个未解析的外部符号。不知道为什么。任何帮助将不胜感激。
Test.hpp:
#ifndef TEST_H
#define TEST_H
#include <time.h>
#include <tuple>
#include "gtest/gtest.h"
#include "gmock/gmock.h"
// Simple header to allow the transfer of command line parameters between main.cpp (where google test is run)
// and TestDuration.cpp (where the test itself is defined).
#define INTERACTIVE 0
#define COMMAND_LINE 1
#define STATIC 2
extern int runType;
extern bool clInputGiven; // Is True only if there is command line input intended for a test.
extern double clDuration;
extern int clIterations;
#endif
main.cpp:
...
int runType = -1;
bool clInputGiven = false;
double clDuration = -1.0;
int clIterations = -1;
...
if (ac == 4 && av[1] == "--cl_mode")
{
runType = COMMAND_LINE;
clInputGiven = true;
clIterations = atoi(av[2]);
clDuration = atoi(av[3]);
}
...
xyz.cpp
...
if (runType == INTERACTIVE) {
// Test block. Expects no throw for every iteration of calib/meas X times.
EXPECT_NO_THROW({
...
xyz.cpp和main.cpp在开头只有一个简单的#include“test.h”。
我的问题: 1.我认为我不理解如何包含真正的工作,因此任何深入的解释都会有所帮助。 2.如果头文件方法会导致太多问题,那么你如何将参数从main.cpp传递给xyz.cpp?
如果您需要更多信息,请询问。感谢您的帮助!
答案 0 :(得分:0)
没关系,经过充分的实验后想出来了。感谢@Ron的帮助。我为改述这个问题而道歉(没有知道它会抹掉你的答案)。
如果遇到同样的问题......
我最终将#pragma一次放在头文件的顶部,在头文件中声明每个变量extern,然后在main.cpp的全局范围内显式定义每个变量(main方法的外部/上方)
pragma曾告诉预处理器只在编译中包含一次文件。它与包含警卫的行为相同,但代码较少。 Extern告诉程序该变量已定义/存储在代码中的其他位置。
希望能帮助将来遇到同样问题的任何人!