2015-06-03 2 views
0

Несомненно из-за моего отсутствия энциклопедических знаний о C/C++, я оказался в трясине, пытаясь инициализировать несколько экземпляров класса экрана TFT. Экран TFT - Adafruit_SSD1331, и я хотел бы иметь один небольшой элемент управления эскизом более одного из них с идентичным кодом.Объявление нескольких экземпляров класса экрана TFT?

Эти ошибки я получаю:

slapbmp.ino:61:5: error: 'tft' in 'class Adafruit_SSD1331' does not name a type 
slapbmp.ino:62:5: error: 'tft' in 'class Adafruit_SSD1331' does not name a type 
slapbmp.ino:63:3: error: missing type-name in typedef-declaration 

... когда я пытаюсь скомпилировать этот код:

#include <Adafruit_GFX.h> 
#include <Adafruit_SSD1331.h> 
#include <SD.h> 
#include <SPI.h> 


// If we are using the hardware SPI interface, these are the pins (for future ref) 
#define sclk 13 
#define mosi 11 
#define rst 9 

#define cs 10 
#define dc 8 

#define cs2 5 
#define dc2 4 


// Color definitions 
#define BLACK   0x0000 
#define BLUE   0x001F 
#define RED    0xF800 
#define GREEN   0x07E0 
#define CYAN   0x07FF 
#define MAGENTA   0xF81F 
#define YELLOW   0xFFE0 
#define WHITE   0xFFFF 

// to draw images from the SD card, we will share the hardware SPI interface 

namespace STD { 
    typedef struct Adafruit_SSD1331 
    { 
    } tft; 
} 

namespace initScreens { 
    typedef struct { 
    Adafruit_SSD1331::tft scr1 = Adafruit_SSD1331(cs, dc, rst); 
    Adafruit_SSD1331::tft scr2 = Adafruit_SSD1331(cs2, dc2, rst); 
    }; 
}; 

// For Arduino Uno/Duemilanove, etc 
// connect the SD card with MOSI going to pin 11, MISO going to pin 12 and SCK going to pin 13 (standard) 
// Then pin 4 goes to CS (or whatever you have set up) 
#define SD_CS 3 // Set the chip select line to whatever you use (4 doesnt conflict with the library) 
#define SD_CS2 2 

// the file itself 
File bmpFile; 

// information we extract about the bitmap file 
int bmpWidth, bmpHeight; 
uint8_t bmpDepth, bmpImageoffset; 

void setup(void) { //... 

Так же, как примечание, я пытаюсь использовать структуру, которая позволяет мне не изменять какие-либо файлы * .h.

ответ

1

Это похоже на проблему с пространством имен. Ошибка компилятора говорит о том, что компилятор не смог найти имя, поэтому он не мог, потому что имя tft находится в пределах пространства имен STD. Вам нужно исправить это или изменить способ разработки кода.

Учитывая, что это C++ Я хотел бы изменить вещи несколько вещей, чтобы использовать возможности языка C++:

//get rid of some of the #defines 
const int cs = 10; 
const int dc = 8; 

//Make a struct to contain info about the screens 
struct Screens { 
    Adafruit_SSD1331 scr1; 
    Adafruit_SSD1331 scr2; 

    Screens(): 
     scr1(cs, dc, rst), 
     scr2(cs2, dc2, rst) 
    { } 
}; 

Тогда вы можете просто создать экземпляр этого класса один раз в setup, если это используется соглашение Arduino. (Или место где-нибудь подходящее, прежде чем вы входите в свой основной цикл)

+0

Боюсь, что все было не так просто, хотя я признаю, что в его коде есть много ошибок. 'slapbmp.ino: 61: 5: ошибка: 'tft' в 'struct STD :: Adafruit_SSD1331' не называет тип slapbmp.ino: 62: 5: ошибка: 'tft' в 'struct STD :: Adafruit_SSD1331' делает не называть тип slapbmp.ino: 63: 3: ошибка: отсутствует имя типа в typedef-декларации' – gustable

+0

@gustable, а я вижу ошибку, которую я совершил. Честно говоря, я просто изменил код здесь, как это было предложено в моем редактировании. В этом коде есть немало вещей, которые могут быть исправлены, может стать хорошим сообщением на http://codereview.stackexchange.com/, как только вы его заработаете. – shuttle87

+0

Я просто посмотрел файл заголовка на github, и я бы, конечно же, попытался инкапсулировать это поведение, я думаю, что обсуждение выходит за рамки ответа здесь, но будет более уместным в отношении codereview, ping me, если вы закончите публикацию там. – shuttle87

Смежные вопросы