通过引用传递对象以在内部存储
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 并且不需要参数 (()).
我正在尝试编写两个类的 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 并且不需要参数 (()).