c++ 使用Arduino库的C类创建对象时出现问题[重复]

fcg9iug3  于 2023-03-25  发布在  其他
关注(0)|答案(2)|浏览(217)

此问题在此处已有答案

(39个答案)
3天前关闭。
我正在为七段显示器创建一个Arduino库,并为此编写了.cpp和.h文件。当我在main中声明object时,如下所示:
shiftreg_7segdisplay segment1=shiftreg_7segdisplay(2);
它给出错误:在函数global constructors keyed to 65535_0_7seg_display_lib.cpp.o.1740': <artificial>:(.text.startup+0x60): undefined reference to shiftreg_7segdisplay::shiftreg_7segdisplay(int)'中
我的代码:

#include "7seg_display_lib.h"

#include "Arduino.h"

shiftreg_7segdisplay segment1=shiftreg_7segdisplay(2);

void setup() 
{
// put your setup code here, to run once:
Serial.begin(9600);

}

void loop() 
{

// put your main code here, to run repeatedly:

}

//My .cpp file:
#include "7seg_display_lib.h"
#include "Arduino.h"

void shiftreg_7segdisplay::begin(){
pinMode(DATA_PIN,OUTPUT);
pinMode(LATCH_PIN,OUTPUT);
pinMode(CLOCK_PIN,OUTPUT);

}

//My .h file:
#pragma once
#include "Arduino.h"
class shiftreg_7segdisplay{

public:

shiftreg_7segdisplay(int x);

void begin();

#define DATA_PIN  8  // Pin connected to DS of 74HC595
#define LATCH_PIN 9  // Pin connected to STCP of 74HC595
#define CLOCK_PIN 10 // Pin connected to SHCP of 74HC595

};
egdjgwm8

egdjgwm81#

在你的.h文件中,你声明了一个构造函数shiftreg_7segdisplay(int x);,它接受一个int作为参数。但是在你的.cpp文件中没有定义这样的函数,因此出现了错误。唯一定义的函数是void shiftreg_7segdisplay::begin()
在您的.cpp文件中添加它的实现:

shiftreg_7segdisplay::shiftreg_7segdisplay(int x) {
    // Do something here
}
zour9fqk

zour9fqk2#

上面的答案几乎90%正确,除了构造函数的定义中写了void返回类型。构造函数的定义丢失了,只在头中声明而没有定义。谢谢。

相关问题