2016-05-17 6 views
0

私はGoogleテストでEclipseを使用しています。私は以下のコードを書いたが、それはエラー "期待された主表現の前に 'led'"を示している。'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

'LedDriver'名前空間の' TEST'機能はありますか?そうでない場合は、 'LedDriver :: LedDriver led'(または:' using namespace LedDriver'または: 'LedDriver :: LedDriver'を使用して)のように、その内部の型を完全修飾する必要があります。 – szczurcio

+0

'LedDriver :: LedDriver led;'を試してください。 – 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

関連する問題