C ++标头中未解析的外部符号

时间:2018-01-08 16:43:51

标签: c++ header googletest

尽管包含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?

如果您需要更多信息,请询问。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

没关系,经过充分的实验后想出来了。感谢@Ron的帮助。我为改述这个问题而道歉(没有知道它会抹掉你的答案)。

如果遇到同样的问题......

我最终将#pragma一次放在头文件的顶部,在头文件中声明每个变量extern,然后在main.cpp的全局范围内显式定义每个变量(main方法的外部/上方)

pragma曾告诉预处理器只在编译中包含一次文件。它与包含警卫的行为相同,但代码较少。 Extern告诉程序该变量已定义/存储在代码中的其他位置。

希望能帮助将来遇到同样问题的任何人!