在'led'

时间:2016-05-17 09:55:50

标签: c++ eclipse

我正在使用Eclipse和谷歌测试。我编写了下面的代码,但它显示错误“在'led'之前预期的primary-expression”。

代码如下:

LedDriverTest.cpp

#include "C:\googletest-master\googletest\include\gtest\gtest.h"
#include "LedDriver.h"
TEST(LedDriverTest, LedInitial){
    LedDriver led;
    EXPECT_EQ(0x00, led.getLedStatus());
}

LedDriver.h

#ifndef LEDDRIVER_H_
#define LEDDRIVER_H_

namespace LedDriver {

class LedDriver {
public:
    LedDriver();
    virtual ~LedDriver();
    unsigned char getLedStatus();
private:
    unsigned char status;
};
} /* namespace LedDriver */
#endif /* LEDDRIVER_H_ */

LedDriver.cpp

#include "LedDriver.h"
namespace LedDriver {

LedDriver::LedDriver() {
    status = 0x00;
}

LedDriver::~LedDriver() {
}

unsigned char LedDriver::getLedStatus(){
    return status;
}
} /* namespace LedDriver */

“LedDriver.h”和“LedDriver.cpp”位于名为“LedDriver”的同一项目中。 “LedDriverTest.cpp”位于另一个名为“LedDriverTest”的项目中。 GCC编译器的包含“LedDriverTest”项目的路径被设置为“LedDriver”项目。

请告诉我有什么问题以及如何解决。

1 个答案:

答案 0 :(得分:2)

您应该在LedDriverTest.cpp文件的顶部添加using namepace LedDriver

编译错误是由于您的类LedDriver在命名空间LedDriver中声明的事实引起的,但是您没有指定它,并且编译器仅在编译LedDriverTest期间在默认命名空间中查找它的.cpp。 using子句告诉它在解析名称时查看名称空间LedDriver以及默认名称空间。

如果您愿意,可以显式使用LedDriver::前缀专门告诉编译器查找哪个命名空间。但是,根据您的使用情况--LedDriver的测试 - 如果您使用using指令,它是自然且易于阅读的。原因是测试文件与测试的功能密切相关 - 因此,通过在每个声明中省略该命名空间,您不会使代码变得不那么清晰。此外,它还可以帮助您消除文件中反复使用的LedDriver::混乱。