Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在'之前应为主表达式;发光二极管';_C++_Eclipse - Fatal编程技术网

C++ 在'之前应为主表达式;发光二极管';

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());

我正在使用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());
}
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
类或只使用完全限定名)。