【问题标题】:Particle P0 (C++) no known conversion for argument 1 from 'ClassA (*)()' to 'ClassA*'粒子 P0 (C++) 没有已知的参数 1 从 'ClassA (*)()' 到 'ClassA*' 的转换
【发布时间】:2016-10-25 05:59:26
【问题描述】:

我目前在为粒子 P0 编写的某些代码中有两个类,例如 ClassA 和 ClassB。固件与 Arduino 非常相似。我希望能够在我的主代码中实例化 ClassA 和 ClassB,然后从 ClassB 访问 ClassA。请参阅下面的示例主线。

ClassA cA;
ClassB cB(&cA);
void setup(){}
void loop(){}

这是我在 ClassA 中的内容:

#ifndef _ClassA_H
#define _ClassA_H
#include "application.h"

class ClassA{
public:
   ClassA();
   void test(void){q++};
private:
   int q;
};
#endif

在 B 类中:

#ifndef _ClassB_H
#define _ClassB_H
#include "application.h"
#include "ClassA.h"

class ClassB{
public:
   ClassB(ClassA * classA);
private:
   int i = 0;
};
#endif

目标是在 ClassB 中有一个方法可以访问 ClassA 中的信息。比如……

_classA->test();

在我的用例中,我试图将云信息存储在 ClassA 中,而 ClassB 包含一系列计时器回调。这样,在 ClassB 中的某些计时器回调之后,我可以检查 ClassA 中是否有任何来自云端的状态更新,例如用户输入。

但是,我在尝试执行此操作时遇到多个错误。

ClassB.h:9:3: note: ClassB::ClassB(ClassA*)
   ClassB(ClassA * classA);
   ^
ClassB.h:9:3: note:   no known conversion for argument 1 from 'ClassA (*)()' to 'ClassA*'
ClassB.h:7:7: note: constexpr ClassB::ClassB(const ClassB&)
 class ClassB{
       ^
ClassB.h:7:7: note:   no known conversion for argument 1 from 'ClassA (*)()' to 'const ClassB&'
ClassB.h:7:7: note: constexpr ClassB::ClassB(ClassB&&)
ClassB.h:7:7: note:   no known conversion for argument 1 from 'ClassA (*)()' to 'ClassB&&'
make[1]: *** [../build/target/user/platform-6TestCode.o] Error 1
make: *** [user] Error 2

通过将 ClassB 更改为以下内容,我取得了一些成功:

class ClassB{
public:
   ClassB();
private:
   int i = 0;
   ClassA * classA;
};

我的问题是我有一个指向 classA 的指针,但无法访问分配给 cA 的内存(在 main 中实例化)。

非常感谢您在这里的帮助。

【问题讨论】:

  • 我现在有了 ClassA 的另一个实例化——指向实例的指针不是 另一个实例化,通过它你可以参考cA。无论如何,发布一个最小的示例来重现错误,否则很难准确地说出什么问题。
  • 我明白了,感谢您的快速响应。您能否澄清一下,我如何从ClassA * classA; 访问cA?谢谢!
  • 什么是_classA,为什么要通过使用指针调用其构造函数来初始化它?你的例子没有意义。
  • _classA 可以被删除。我希望能够使用指向类的实例化的指针来调用构造函数。在发送 Serial 或 SPI 类的地址时,这对我有用。请参阅此adafruit example。在那里,他们将 Serial 类的地址传递给用于 GPS 接口的类。想对 ClassA 和 ClassB 做类似的事情。
  • 消息中的'ClassA (*)()' 表示您有一个返回ClassA 的函数。你的真实代码中没有ClassA cA();,是吗?

标签: c++ class pointers arduino embedded


【解决方案1】:

问题在于ClassA cA; 的实例化,我不小心写成ClassA cA();

谢谢大家的意见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2021-02-19
    • 1970-01-01
    相关资源
    最近更新 更多