我正在使用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”项目。
请告诉我有什么问题以及如何解决。
答案 0 :(得分:2)
您应该在LedDriverTest.cpp文件的顶部添加using namepace LedDriver
。
编译错误是由于您的类LedDriver
在命名空间LedDriver
中声明的事实引起的,但是您没有指定它,并且编译器仅在编译LedDriverTest期间在默认命名空间中查找它的.cpp。 using
子句告诉它在解析名称时查看名称空间LedDriver
以及默认名称空间。
如果您愿意,可以显式使用LedDriver::
前缀专门告诉编译器查找哪个命名空间。但是,根据您的使用情况--LedDriver的测试 - 如果您使用using
指令,它是自然且易于阅读的。原因是测试文件与测试的功能密切相关 - 因此,通过在每个声明中省略该命名空间,您不会使代码变得不那么清晰。此外,它还可以帮助您消除文件中反复使用的LedDriver::
混乱。