对已声明函数的未定义引用

时间:2016-03-03 11:58:09

标签: c++

首先让我先说这是MAX32微控制器的代码。我遇到问题的代码是用c ++编写的。我正在为这个项目创建的一些文件

所以我一直在努力工作几个小时,我找不到我的代码有什么问题。 我在C ++上有点生疏,但代码似乎没错。

我得到的错误是

Senior_Design.cpp.o:在函数setup': /privateSenior_Design.cpp:13: undefined reference to Accelerometer :: setup()'中 Senior_Design.cpp.o:在函数loop': /privateSenior_Design.cpp:20: undefined reference to Accelerometer :: read()' Senior_Design.cpp.o:在函数__static_initialization_and_destruction_0': /privateSenior_Design.cpp:7: undefined reference to Accelerometer :: Accelerometer(long)'中 collect2:ld返回1退出状态

主代码名为“senior_design”,它是

#include <Wire.h>
#include "accel.h"

Accelerometer bodyAccel = Accelerometer(321);
void setup(void){
  Serial.begin(9600);
  //Wire.begin(); // join i2c bus (address optional for master)


  if( !bodyAccel.setup() ){
    Serial.println("Error with accelerometer");
    while(1);
  }
}

void loop(void){
 bodyAccel.read(); 
 Serial.print("Accel. Reading: ");
 Serial.println(bodyAccel.x);
 Serial.println(bodyAccel.y);
 Serial.println(bodyAccel.z);
 delay(1000);
}

我将使用这两个其他文件。这个是accel.cpp文件

#include "accel.h"
#include <Wire.h>
#include "WProgram.h"
#include <limits.h>
static float Accel_MG_LSB = 0.001f;


Accelerometer::Accelerometer(long sensorID){
    sensor_ID = sensorID;
}

void Accelerometer::read(){
    Wire.beginTransmission( (byte)accelAddr );
    delay(50);
    Wire.send(accelXRegAddr | 0x80);
    Wire.endTransmission();

    delay(50);
    Wire.requestFrom( (byte)accelAddr, (byte)6 );
    while(Wire.available() < 6);

    xlo = Wire.receive();
    xhi = Wire.receive();
    ylo = Wire.receive();
    yhi = Wire.receive();
    zlo = Wire.receive();
    zhi = Wire.receive();

    accelDatax = (int16_t)(xlo | (xhi << 8)) >> 4;
    accelDatay = (int16_t)(ylo | (yhi << 8)) >> 4;
    accelDataz = (int16_t)(zlo | (zhi << 8)) >> 4;

    x = accelDatax * Accel_MG_LSB * 9.8;
    y = accelDatay * Accel_MG_LSB * 9.8;
    z = accelDataz * Accel_MG_LSB * 9.8;

}

bool Accelerometer::setup(){
    Wire.begin();
    //Enable 100Hz on accelerometer
    Wire.beginTransmission(accelAddr);
    Wire.send(0x20);
    Wire.send(0x57);
    Wire.endTransmission();

    Wire.beginTransmission(accelAddr);
    Wire.send(0x20);
    Wire.endTransmission();
    Wire.requestFrom(accelAddr, (byte)1);


    uint8_t reg = Wire.receive();
    Wire.endTransmission();
    if(reg != 0x57)
        return false;

    return true;    
}

及其头文件(accel.h)

#ifndef accel_h
#define accel_h


#include "WProgram.h"
#include <Wire.h>

#define accelAddr (0x32 >> 1)
#define accelXRegAddr 0x28

class Accelerometer{
public:
    Accelerometer(long sensorID = -1);
    void read(void);
    bool setup(void);
    float x;
    float y;
    float z;

private:
    long sensor_ID;
    uint8_t xlo;
    uint8_t xhi;
    uint8_t ylo;
    uint8_t yhi;
    uint8_t zlo;
    uint8_t zhi;
    float accelDatax;
    float accelDatay;
    float accelDataz;

};

#endif /* accel_h */

0 个答案:

没有答案
相关问题