[英]Undefined reference to element in avr-g++
我想用cpp中的幾個其他類編譯一個簡單的項目。 不幸的是,當使用avr-g++.exe -o stepper.elf src/add_functions.o src/ASF/common/services/hugemem/avr8/avr8_hugemem.o src/ASF/common/services/sleepmgr/xmega/sleepmgr.o src/ASF/common/services/spi/xmega_spi/spi_master.o src/ASF/xmega/drivers/dma/dma.o src/ASF/xmega/drivers/spi/spi.o src/gpio_control.o src/spi_control.o src/usart_control.o src/ASF/common/boards/user_board/init.o src/ASF/common/services/clock/xmega/sysclk.o src/ASF/common/services/ioport/xmega/ioport_compat.o src/ASF/common/services/serial/usart_serial.o src/ASF/xmega/drivers/cpu/ccp.o src/ASF/xmega/drivers/usart/usart.o src/main.o -Wl,-Map="stepper.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atxmega16a4
調用avr-g++.exe -o stepper.elf src/add_functions.o src/ASF/common/services/hugemem/avr8/avr8_hugemem.o src/ASF/common/services/sleepmgr/xmega/sleepmgr.o src/ASF/common/services/spi/xmega_spi/spi_master.o src/ASF/xmega/drivers/dma/dma.o src/ASF/xmega/drivers/spi/spi.o src/gpio_control.o src/spi_control.o src/usart_control.o src/ASF/common/boards/user_board/init.o src/ASF/common/services/clock/xmega/sysclk.o src/ASF/common/services/ioport/xmega/ioport_compat.o src/ASF/common/services/serial/usart_serial.o src/ASF/xmega/drivers/cpu/ccp.o src/ASF/xmega/drivers/usart/usart.o src/main.o -Wl,-Map="stepper.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atxmega16a4
適用於以下代碼:
#include <asf.h>
#include <string.h>
#include "usart.h"
class usart_controller
{
//variables
public:
protected:
private:
static usart_rs232_options_t USART_options;
USART_t *usart;
//functions
public:
usart_controller(USART_t *usart, uint32_t baudrate, USART_CHSIZE_t charlength, USART_PMODE_t paritybyte, bool stopbit);
~usart_controller();
void send_data(uint32_t *data32, size_t data32_size);
uint8_t * rec_data();
protected:
private:
usart_controller( const usart_controller &c );
usart_controller& operator=( const usart_controller &c );
}; //usart_controller
#include "usart_control.h"
// default constructor
usart_controller::usart_controller(USART_t *usart, uint32_t baudrate, USART_CHSIZE_t charlength, USART_PMODE_t paritybyte, bool stopbit)
{
this->USART_options.baudrate = baudrate;
//this->USART_SERIAL_OPTIONS.charlength = charlength;
//this->USART_SERIAL_OPTIONS.paritytype = paritybyte;
//this->USART_SERIAL_OPTIONS.stopbits = stopbit;
this->usart = usart;
//usart_init_rs232(usart, &(this->USART_SERIAL_OPTIONS));
} //usart_controller
// default destructor
usart_controller::~usart_controller()
{
} //~usart_controller
void usart_controller::send_data(uint32_t * data32, size_t data32_size)
{
size_t data_size = 4 * data32_size;
uint8_t *data = new uint8_t[data32_size * 4];
for(unsigned int i = 0; i < data32_size; i++)
{
for(int j = 0; j < 4; j++)
{
data[i*j+j] = (data32[i] << (j*8));
}
}
usart_serial_write_packet(this->usart, data, data_size * sizeof(uint8_t));
delete[] data;
}
uint8_t * usart_controller::rec_data()
{
uint8_t * data = new uint8_t[32];
usart_serial_read_packet(this->usart, data, 32*sizeof(uint8_t));
return data;
}
我收到usart_controller::USART_options'" for the command
this-> USART_options.baudrate = baudrate;”的錯誤“錯誤:對usart_controller::USART_options'" for the command
未定義引用”。 當我單獨編譯它時,一切都很好,並且我得到了一個有效的目標文件。 稍后嘗試鏈接時,出現上面顯示的錯誤。 為什么? 我錯過了什么? 我已經鏈接了我需要的一切。
在c ++中,僅在類中聲明靜態數據成員是不夠的。 還必須在某處定義它來為其分配內存。 如果添加
usart_rs232_options_t usart_controller::USART_options;
在源文件中的某個位置(例如,在類定義之后),它將被很好地鏈接:)
PS:Atmel嗎? 玩得開心,小心那個小魔鬼! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.