我是一個相當有經驗的.net開發人員,但是對於Arduino和C/C++來說,我正嘗試創建我的第一個庫,這是7段LED顯示屏的簡單驅動程序。我有許多頑固的編譯器錯誤,但本着一件事的精神,這是第一次。我想爲我的類添加一個無參數的構造函數,並且當我編譯的庫很好時,但是當我嘗試在草圖中使用該類時,編譯器向我提供了'''seSegmentLed'中成員'setDigit'的相當鈍的請求,非類類型「SevenSegmentLed()」無參數構造函數
最簡單的例子代碼如下:
#ifndef SevenSegmentLed_h
#define SevenSegmentLed_h
#include "Arduino.h"
class SevenSegmentLed
{
public:
void setDigit(int digit);
SevenSegmentLed();
};
#endif
#include "Arduino.h"
#include "SevenSegmentLed.h"
SevenSegmentLed::SevenSegmentLed()
{
}
void SevenSegmentLed::setDigit(int digit)
{
}
#include "SevenSegmentLed.h"
SevenSegmentLed sevenSegmentLed();
void setup() {
sevenSegmentLed.setDigit(4);
}
void loop() {
// put your main code here, to run repeatedly:
}
然而如果我改變構造簽名:SevenSegmentLed(int wtf);
並且因此它實例:SevenSegmentLed sevenSegmentLed(1);
它編譯就好了。正如參數所說,WTF?
看起來像最令人頭疼的解析的情況下,我可能會添加的東西不會出現在C#中。 'SevenSegmentLed sevenSegmentLed();'這被編譯器解釋爲函數聲明。 – shuttle87
謝謝我認爲它是這樣的,那麼我該怎麼做呢? –
順便說一句,即使你有正確的語法,全局變量*很少*(我幾乎想說永遠不會)在C++中的一個好主意。 –