C++ 在'之前应为主表达式;发光二极管';
我正在使用Eclipse和google测试。我写了下面的代码,但它显示了错误“在“led”之前预期的主表达式” 代码如下: 莱德维斯特酒店C++ 在'之前应为主表达式;发光二极管';,c++,eclipse,C++,Eclipse,我正在使用Eclipse和google测试。我写了下面的代码,但它显示了错误“在“led”之前预期的主表达式” 代码如下: 莱德维斯特酒店 #include "C:\googletest-master\googletest\include\gtest\gtest.h" #include "LedDriver.h" TEST(LedDriverTest, LedInitial){ LedDriver led; EXPECT_EQ(0x00, led.getLedStatus());
#include "C:\googletest-master\googletest\include\gtest\gtest.h"
#include "LedDriver.h"
TEST(LedDriverTest, LedInitial){
LedDriver led;
EXPECT_EQ(0x00, led.getLedStatus());
}
LED驱动器
#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”的项目中。“ledrivertest.cpp”在另一个名为“ledrivertest”的项目中。GCC编译器的“LedDriverTest”项目的包含路径设置为“LedDriver”项目
请告诉我出了什么问题以及如何解决。您应该使用Namespace LedDriver在LedDriverTest.cpp文件顶部添加
编译错误是由于您的类LedDriver
在命名空间LedDriver
中声明,但您没有指定此项,编译器在编译LedDriverTest.cpp期间仅在默认命名空间中查找它。using
子句告诉它在解析名称时查看名称空间LedDriver
以及默认名称空间
您可以显式地使用ledriver::
前缀来明确告诉编译器要查找哪个名称空间。但是,考虑到您的使用情况(测试LED驱动程序),如果您使用指令,它是自然的,并且易于阅读。原因是测试文件与被测试的功能密切相关——因此,在每个声明中省略名称空间并不会降低代码的清晰度。此外,它还可以帮助您消除文件中反复使用且经常使用的ledriver::
的混乱。您应该在ledrivertest.cpp文件顶部添加using namepace ledriver
编译错误是由于您的类LedDriver
在命名空间LedDriver
中声明,但您没有指定此项,编译器在编译LedDriverTest.cpp期间仅在默认命名空间中查找它。using
子句告诉它在解析名称时查看名称空间LedDriver
以及默认名称空间
您可以显式地使用ledriver::
前缀来明确告诉编译器要查找哪个名称空间。但是,考虑到您的使用情况(测试LED驱动程序),如果您使用指令,它是自然的,并且易于阅读。原因是测试文件与被测试的功能密切相关——因此,在每个声明中省略名称空间并不会降低代码的清晰度。此外,它还可以帮助您消除文件中反复使用的ledriver::
的混乱。您的TEST
函数是否位于ledriver
命名空间中?如果没有,则需要完全限定其中的任何类型,例如:ledriver::ledriver-led
(或者:使用名称空间ledriver
,或者:使用ledriver::ledriver
)。尝试ledriver::ledriver-led代码>。当我添加“使用命名空间LedDriver”时,出现了错误“对“LedDriver”的引用不明确”。我试图添加'LedDriver::'但出现了'LedDriver::LedDriver::LedDriver()'的未定义引用。您的测试函数是否位于LedDriver
命名空间中?如果没有,则需要完全限定其中的任何类型,例如:ledriver::ledriver-led
(或者:使用名称空间ledriver
,或者:使用ledriver::ledriver
)。尝试ledriver::ledriver-led代码>。当我添加“使用命名空间LedDriver”时,出现了错误“对“LedDriver”的引用不明确”。我试图添加'LedDriver::'但出现了'LedDriver::LedDriver::LedDriver()'的未定义引用。这确实可以修复编译错误,但您没有解释原因,也没有提到替代方法(仅导入LedDriver
类或仅使用完全限定名)。这确实可以修复编译错误,但是您没有解释原因,也没有提到备选方案(只导入LedDriver
类或只使用完全限定名)。