【问题标题】:expected primary-expression before 'led''led' 之前的预期主要表达式
【发布时间】:2016-05-17 09:55:50
【问题描述】:

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

代码如下:

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”项目。

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

【问题讨论】:

  • 您的TEST 函数是否在LedDriver 命名空间中?如果没有,您需要完全限定其中的任何类型,例如:LedDriver::LedDriver led(或:using namespace LedDriver,或:using LedDriver::LedDriver)。
  • 试试LedDriver::LedDriver led;
  • 当我添加 'using namespace LedDriver' 时,出现错误'reference to "LedDriver" is ambiguous'。我尝试添加“LedDriver::”,但出现“对“LedDriver::LedDriver::LedDriver()”的未定义引用。

标签: c++ eclipse


【解决方案1】:

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

编译错误是因为你的类LedDriver被声明在命名空间LedDriver中,但是你没有指定这个,编译器在编译LedDriverTest.cpp时只在默认命名空间中寻找它。 using 子句告诉它在解析名称时查看命名空间 LedDriver 以及默认命名空间。

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

【讨论】:

  • 这确实可以修复编译错误,但您没有解释原因,也没有提到替代方案(仅导入 LedDriver 类或仅使用完全限定名称)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 2018-11-27
  • 2020-01-16
相关资源
最近更新 更多