2017-06-15 53 views
2

正如你可能從這個問題中猜測的,我對用C++進行oop編程頗爲陌生。 (我之前只做過Java) 不管怎樣,我正在嘗試爲Arduino項目創建一個自定義類並獲取提到的錯誤。下面是我的文件:C++初學者:預計'int'前的非限定符號

頁眉Touchable.h

#ifndef Touchable 
#define Touchable 
#include <Adafruit_TFTLCD.h> 

#include <Arduino.h> 

class Touchable { 
    public: 
    int posX; 
    int posY; 
    Touchable(int, int); //<-- Error here 
    ~Touchable(); 
    void Touchable::draw(); 
}; 

#endif 

而且Touchable.cpp

#include "Touchable.h" //include the declaration for this class 
#include <Adafruit_TFTLCD.h> 


Touchable::Touchable(int x, int y) { 
    posX = x; 
    posY = y; 
} 

Touchable::~Touchable() { 
    /*nothing to destruct*/ 
} 

//turn the LED on 
void Touchable::draw() { 
    //tft.fillRect(posX, posY, 100, 100, 0x0000); 
} 

編輯: 編譯器消息:

In file included from sketch/Touchable.cpp:1:0: 
Touchable.h:11: error: expected unqualified-id before 'int' 
    Touchable(int x, int y); 
      ^
Touchable.h:11: error: expected ')' before 'int' 
Touchable.h:12: error: expected class-name before '(' token 
    ~Touchable(); 
      ^
Touchable.h:13: error: invalid use of '::' 
    void Touchable::draw(); 
         ^
Touchable.h:14: error: abstract declarator '<anonymous class>' used as declaration 
}; 
^ 
Touchable.cpp:5: error: expected id-expression before '(' token 
Touchable::Touchable(int x, int y) { 
        ^
Touchable.cpp:10: error: expected id-expression before '~' token 
Touchable::~Touchable() { 
      ^
exit status 1 
expected unqualified-id before 'int' 
+0

如果你把int x和int y放在你的頭文件中它是否被編譯? – Eddge

+2

我看到的唯一問題是Touchable :: draw()中的額外資格(刪除Touchable :)。 –

+0

不能,同樣的錯誤 – user7408924

回答

11

你必須選擇一個不同的因爲預處理器,所以包含後衛宏的名稱(通常爲TOUCHABLE_H)你的代碼翻譯在Touchable.h到:

class { 
public: 
    int posX; 
    int posY; 
    (int, int); 
    ~(); 
    void ::draw(); 
}; 

同樣適用於所有文件#include這一個...或者你可以使用#pragma once

+1

好的。這就是爲什麼在宏中使用全部大寫而不是在代碼中使用它們的規則。 – Slava

+0

該死的,我不會猜測的年齡:D這麼簡單,雖然 – Sam

+0

例如像這樣:#ifndef _Touchable #define _Touchable? – user7408924