2014-01-04 7 views
0

Я пытаюсь справиться с наследованием на C++, прежде чем пытаться реализовать что-то в большем файле. Я понимаю, что этот вопрос задан раньше, но я буквально все понял, что мог найти на этом - ничто не указывало мне на исправление. Так что, надеюсь, добрый член-член может мне помочь.Ожидаемое имя класса до {ошибка

Я пишу библиотеку для Arduino, чтобы быть чистым. Вот мой код:

CtrlBrd.h

#ifndef CtrlBrd_h 
#define CtrlBrd_h 

#include "Arduino.h" 

class CtrlBrdClass 
{ 
    public: 
     CtrlBrdClass(); 

}; 

extern CtrlBrdClass CtrlBrd; 

#endif 

CtrlBrd.cpp

#include "Arduino.h" 
#include "CtrlBrd.h" 

CtrlBrdClass::CtrlBrdClass() { 
} 

int CtrlBrdClass::test() 
{ 
    return 79; 
} 

CtrlBrdClass CtrlBrd; 

CtrlBrdEx.h

#ifndef CtrlBrdEx_h 
#define CtrlBrdEx_h 

#include <CtrlBrd.h> 

class CtrlBrdEx : public CtrlBrdClass { // <----- Getting the error here!! 

public: 
    CtrlBrdEx(); 
    int test2(); 

}; 

extern CtrlBrdEx CtrlBrd; 

#endif 

CtrlBrdEx.cpp

#include "CtrlBrdEx.h" 

int CtrlBrdEx::test2() { 

    return CtrlBrd.test() +1; 

} 

CtrlBrdEx CtrlBrd; 

Ошибка:

error: expected class-name before '{' token

+0

Вы опубликовали всю информацию об ошибке? Разве не была ошибка «заголовок не найден»? Это важно ... –

ответ

0

Кажется, единственное решение состоит в том, чтобы включить оба файла в начало вашего основного файла кода .ino. Компилятор Arduino, похоже, не любит включать библиотеки из библиотек ...

4

Заменить

#include <CtrlBrd.h> 

с

#include "CtrlBrd.h" 

Точная последовательность мест, поиск которых выполняется компилятором, зависит от реализации в обоих случаях (§16.2 [cpp.include]), но оба gcc и VC (и каждый другой компилятор, если я должен был угадать) будут искать текущий каталог для цитируемых формы, но не обязательно для другой.

+1

'extern CtrlBrdClass CtrlBrd;', 'CtrlBrdEx CtrlBrd;', 'CtrlBrdClass CtrlBrd;', 'extern CtrlBrdEx CtrlBrd;' тоже может раздражать, или я ошибаюсь? – ShinTakezou

+0

@ShinTakezou Зависит от того, что вы подразумеваете под * раздражающим *. Ничего синтаксически не так. – Praetorian

+0

CtrlBrd объявлено как другая вещь ... раздражающим, я имею в виду, что он не будет компилироваться. – ShinTakezou

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