通过引用传递对象以在内部存储

Pass Object by reference to store internally

我正在尝试编写两个类的 C++ 示例,一个存储对另一个对象的引用 class 用于 arduino。

到目前为止,我的最少代码运行得不太好,希望能在这里找到解决方案的任何指示(傻笑):

main.cpp:

#include <Arduino.h>
#include <ClassA.h>
#include <ClassB.h>

void setup() {
  // put your setup code here, to run once:
  ClassA clA();
  ClassB clB(clA);
};

void loop() {
  // put your main code here, to run repeatedly:
};

classA.h:

#ifndef H_CLASSA
#define H_CLASSA

class ClassA
{
private:
    /* data */
public:
    ClassA();
    ~ClassA();
};

#endif

classA.cpp:

#include <ClassA.h>

ClassA::ClassA()
{
};

ClassA::~ClassA()
{
};

classB.h

#ifndef H_CLASSB
#define H_CLASSB

#include <ClassA.h>

class ClassB
{
private:
    ClassA& _a;
public:
    ClassB(ClassA& a);
    ~ClassB();
};

#endif

ClassB.cpp

#include <ClassB.h>
#include <ClassA.h>

ClassB::ClassB(ClassA &a)  : 
_a(a)
{
}

ClassB::~ClassB()
{
}

这里主要显示错误:ClassB clB(clA);

Keine Instanz des Konstruktors ""ClassB::ClassB"" stimmt mit der Argumentliste überein. -- Argumenttypen sind: (ClassA ())

编译时出现如下错误:

src\main.cpp: In function 'void setup()':
src\main.cpp:8:17: error: no matching function for call to 'ClassB::ClassB(ClassA (&)())'
   ClassB clB(clA);
                 ^
In file included from src\main.cpp:3:0:
src/ClassB.h:11:5: note: candidate: ClassB::ClassB(ClassA&)
     ClassB(ClassA& a);
     ^~~~~~
src/ClassB.h:11:5: note:   no known conversion for argument 1 from 'ClassA()' to 'ClassA&'
src/ClassB.h:6:7: note: candidate: constexpr ClassB::ClassB(const ClassB&)
 class ClassB
       ^~~~~~
src/ClassB.h:6:7: note:   no known conversion for argument 1 from 'ClassA()' to 'const ClassB&'

有人知道这里发生了什么吗?感谢您的帮助!

尝试替换这个

void setup() {
  // put your setup code here, to run once:
  ClassA clA();
  ClassB clB(clA);
};

有了这个

void setup() {
  // put your setup code here, to run once:
  ClassA clA;
  ClassB clB(clA);
};

原因:

当你这样做时

ClassA clA();

您不是在创建 class A 的实例,而是 被解释为一个名为 clA 的函数声明,它 returns 一个 ClassA 并且不需要参数 (()).