2015-01-22 1 views
0

Я пытаюсь использовать shiftreg.h с shiftreg.cpp (который я ранее использовал успешно в своем основном файле) в классе и вызывать одну из его функций , К сожалению, не компилируется и дает ошибку: «shiftWrite» не был объявлен в этой области. Я думаю, что я включил каждый заголовочный файл во всех остальных, и они должны найти друг друга. Что происходит не так?Функция вызова, определенная в другом заголовочном файле в классе в C++

Это shiftreg.h:

#ifndef shiftreg_h 
#define shiftreg_h 

void shiftWrite(uint8_t data); 

#endif 

И это shiftreg.cpp:

#include "ShiftReg.h" 

void shiftWrite(uint8_t data) { 
    do something;} 

Функция shiftWrite, я хочу использовать в зависимости от класса сегментного, как показано ниже, с SegmentDisplay.h

#ifndef SegmentDisplay_h 
#define SegmentDisplay_h 

#include <ShiftReg/shiftReg.h> 

class SegmentDisplay{ 
public: 
    void pickNumber(int x); 
}; 

#endif 

И SegmentDispplay.cpp:

#include "SegmentDisplay.h" 

void SegmentDisplay::pickNumber(int x){ 
    shiftWrite(ONE);} 

Все начинается в программе Arduino с:

#include "SegShift.h" 

    SegmentDisplay dsp(); 

    int main(void){ 
     while(1){ 
      dsp.pickNumber(j);}} 

ответ

-1

В SegmentDisplay.h вы должны включить shiftreg.cpp не shiftreg.h

В противном случае код не видит, что функция diclared

+0

изменение #include на #include в SegmentDisplay.h дает ту же ошибку – Ezraneut

+1

В этом случае нет причин для '# include' файла' .cpp', или в большинстве случаев. – TartanLlama

0

вы, кажется, в том числе два файла:

в ShiftReg.cpp вы делаете: #include "ShiftReg.h"

В SegmentDisplay.h вы #include <ShiftReg/shiftReg.h>

(Кстати, я бы просто включить shiftreg.h в вашем SegmentDisplay.cpp.)

+0

ShiftReg.h находится в другой папке, а затем SegmentDisplay.h. вот почему я делаю . Если я этого не сделаю, он даже не найдет библиотеку. – Ezraneut

+0

Я добавил #include в SegmentDisplay.cpp, но он дает ту же ошибку – Ezraneut

0

Я добавил файлы ShiftReg.h и ShiftReg.cpp в папку файлов SegmentDisplay и компилируется! Я рад, что я решил проблему с помощью ваших ответов.

Однако мне интересно, почему я не могу использовать файлы, когда они находятся в другой папке. Есть идеи?

+0

Ваша проблема была в ShiftReg.cpp, вы не указали тот же файл. Это тоже должно быть '#include '. –

+0

Когда я добавляю #include в ShiftReg.cpp, он также не работает. На компьютере есть только один файл, который называется ShiftReg.h, и находится в папке ShiftReg. – Ezraneut