Это моя структура кода:
Flashtraining.h
#ifndef Flashtraining_h
#define Flashtraining_h
#include "Enhanced_SPIFlash_Marzogh\\SPIFlash.h"
class Flashtraining
{
static SPIFlash myflash; //Should it be declared outside private/public? Does it matter?
public:
bool start_new_training();
bool stop_training();
/*Some more methods*/
private:
bool _Check_or_Initialize();
};
Flashtraining.cpp
#include "Flashtraining.h"
SPIFlash Flashtraining::myflash;
bool Flashtraining::start_new_training(){
/*Do smth. with myflash object*/
}
bool Flashtraining::stop_training()
{
/*Also do smth. with myflash object*/
}
main.cpp
#include "Flashtraining.h"
Flashtraining training; //Create object of class Flashtraining
training.start_new_training(); //Ignoring the main funcion, return values etc.
SPIFlash
не имеет конструктора и имеет только нестатические элементы.Если вам также нужен этот файл, прокомментируйте, и я предоставлю его, но я уверен, что проблема не в этом.
Моя проблема: при выполнении этого кода я получаю
C:\Users\--\Flashtraining.cpp.o: In function `Flashtraining::_Check_or_Initialize()':
C:\Users\--\Flashtraining.cpp:265: undefined reference to `SPIFlash::begin(unsigned char, unsigned long)'
C:\Users\--\Flashtraining.cpp:268: undefined reference to `SPIFlash::getJEDECID()'
Примечание: _Check_or_Initialize()
является одной из функций, объявленных в файле Flashtraining.cpp.Он объявлен так же, как и другие, которые я предоставил.
Функции в SPIFlash
объявлены нестатичными и реализованы правильно.
Что я не понимаю: потому что я используюключевое слово static, я могу просто объявить объект (myflash
типа SPIFlash
) в файле заголовка (Flashtraining.h
) без его инициализации, верно?Это также предотвращает переопределения.Из-за правила One определения в c ++ я инициализирую переменную Once в Flashraining.cpp
, где она используется.Затем я должен иметь возможность использовать (.) Нотацию для доступа к нестатическим элементам (функциям, таким как myflash.start_training()
) или нет?
Почему это дает мне неопределенную ссылку и как я могу это исправить?
Я посмотрел этот пост и думаю, что изменил свой код соответствующим образом, но он не работает.
Дополнительная информация: Это код .ino, которыйоснован на c ++.Все написанное на с ++ работает нормально.Использование -std=gnu++11
.