2016-05-17 63 views
0

我使用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」項目。

請告訴我什麼是錯的,以及如何解決它。

+0

LedDriver命名空間中的'TEST'函數?如果不是,您需要完全限定其中的任何類型,例如:'LedDriver :: LedDriver led'(或:'使用名稱空間LedDriver',或者:'使用LedDriver :: LedDriver')。 – szczurcio

+0

嘗試'LedDriver :: LedDriver領導;'。 – JimmyB

+0

當我添加'使用命名空間LedDriver',出現錯誤'引用'LedDriver'模糊'。我試圖添加'LedDriver ::',但'未定義的引用'LedDriver :: LedDriver :: LedDriver()'出現。 – hiroaki

回答

2

您應該在LedDriverTest.cpp文件的頂部添加using namepace LedDriver

編譯錯誤是由您的LedDriver類的命名空間LedDriver聲明的事實引起的,但你不指定這個和編譯器只LedDriverTest.cpp的編譯過程中尋找它的默認命名空間。 using子句告訴它在解析名稱時查找名稱空間LedDriver以及默認名稱空間。

如果您願意,您可以明確地使用LedDriver::前綴來具體告訴編譯器要查找哪個命名空間。但是,考慮到您的使用情況 - LedDriver的測試 - 如果您是using指令,則它很自然且易於閱讀。原因是測試文件與被測試的功能密切相關 - 所以你沒有通過在每個聲明中忽略該命名空間來使代碼變得不那麼清楚。此外,它可以幫助您消除在文件中反覆使用並經常使用的LedDriver::混亂。

+0

這確實會解決編譯錯誤,但是你沒有解釋爲什麼,你沒有提到替代方案(只導入'LedDriver'類或僅使用完全限定名)。 – szczurcio

相關問題