c++ - C++:将对象引用作为参数传递会出错:没有匹配的函数用于调用 class::function()
问题描述
将对象引用作为参数传递给我错误:
No matching function for a call to i2cController::i2cController
我也尝试过传递一个指针,并用 new 创建 i2cController。
两次尝试都给了我相同的结果。
为什么它甚至抱怨对 i2cController 的调用,我不是传递对象而不是调用它吗?
i2Controller(传递的对象)
i2cController.h
#pragma once
class i2cController
{
private:
int foo;
public:
i2cController(int Foo);
void write(int value);
};
i2cController.cpp
#include <i2cController.h>
i2cController::i2cController(int Foo)
{
foo = Foo;
}
void i2cController::write(int value)
{
foo++;
}
Led 类(接收对象引用,错误源自)
错误源自:Led::Led(int pin, i2cController &Controller);
Led.h
#pragma once
#include <i2cController.h>
class Led
{
private:
i2cController controller;
int pin;
public:
Led(int pin, i2cController &Controller);
void turnOn();
};
led.cpp
#include <Led.h>
Led::Led(int Pin, i2cController &Controller)
{
controller = Controller;
pin = Pin;
}
void Led::turnOn()
{
controller.write(pin);
}
主要的
i2cController controller(5);
Led led1 = new Led(led1Pin, controller);
解决方案
在你的类Led
中,你有controller
一个字段,你没有初始化它,而是在Led
构造函数体中使用赋值,所以它必须首先默认构造。解决方案可能是初始化它并制作副本:
Led::Led(int Pin, i2cController &Controller) :
controller( Controller ),
pin( Pin )
{
}
那么你的问题应该会消失
推荐阅读
- python - 使用 chromedriver 从 Selenium 打印 PDF
- javascript - 如何解决模拟函数中的 Promise?
- java - 响应不是来自使用改造 2 的服务器
- c# - 如何通过将文件从 HttpPostedFileBase 复制到 MemoryStream 来将文件附加到电子邮件?
- owasp - 使用授权标头扫描 API
- sql - 在 case 语句中计算 % 不能正常工作
- python - 将数学应用于熊猫中行具有相同值的列
- autodesk-forge - 如何显示与文件中所有问题相对应的问题 ID?
- javascript - 简化 Javascript 中的 if 语句
- javascript - 跟踪脚本的返回值