2013-06-14 2 views
1

Я попытался найти ответ на этот вопрос, но ничего не нашел. Я пытаюсь создать класс статических методов, поэтому я могу передать указатель на функцию SPI::transmitData(), который позже позвоню с помощью SPI::call(). Тем не менее, я получаю сообщение об ошибке:Хранение указателя функции для последующего использования

unresolved symbol SPI::mycallback, first referenced in ./spi.obj

spi.h:

#ifndef SPI_H_ 
#define SPI_H_ 

#include "msp430g2553.h" 

class SPI { 
public: 
    typedef void (*foo)(void); 
    static foo mycallback; 

    static void transmitData(unsigned char data, foo callback); 
    static void call(); 
}; 

#endif /* SPI_H_ */ 

spi.cpp:

#include "spi.h" 

void SPI::transmitData(unsigned char data, foo callback) { 
    mycallback = callback; // causes error 
    UCA0TXBUF = data; 
} 

void SPI::call() { 
    //SPI::mycallback(); 
} 

Я пытался возиться с ним и ошибки исчезает, когда я комментирую выделенную строку. Не уверен, что происходит.

ответ

8

Вам нужно создать экземпляр статического члена перед его использованием:

в spi.cpp

SPI::foo SPI::mycallback = NULL; 
+0

* Facepalm * Я попытался поставить эту строку в заголовок и получает ошибку переопределения. Спасибо, первый день знакомства с C++ был грубым. – JustcallmeDrago

+1

@ JustcallmeDrago приветствую вас, рад, что помог. – billz

+4

@ JustcallmeDrago, тогда вы должны принять ответ ;-) –

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