【问题标题】:Member variable needs parameters for constructor成员变量需要构造函数的参数
【发布时间】:2013-01-18 10:35:23
【问题描述】:

我正在尝试在我编写的类中包含一个成员变量,

MyClass.h

#include <SomeClass.h>
Class MyClass{
    public:
        MyClass(int par);
        SomeClass B;
}

MyClass.cpp

#include "MyClass.h"
#include "SomeClass.h"
MyClass::MyClass(int par){
    B=SomeClass(par);
}

但是SomeClass 为其构造函数使用变量,所以上面的代码产生no matching function for call to "SomeClass::SomeClass()"

我应该在这里做什么?

更新: 似乎成员初始化器列表是要走的路,但是如果我想使用 SomeClass 对象数组怎么办?所以 MyClass.h 变成:

#include <SomeClass.h>
Class MyClass{
    public:
        MyClass(int par);
        SomeClass B[2];
}

【问题讨论】:

    标签: c++ class arduino


    【解决方案1】:

    使用成员初始化列表

    MyClass::MyClass(int par) : B(par)
    {
    }
    

    【讨论】:

    • 谢谢@billz!它有效:) 可以在这里使用数组吗?说BB[2]
    • @XunYang:是的,但仅限于 C++11:B{par, par}
    【解决方案2】:

    你不能完全得到你想要的,但你可以得到你需要的。要提供对对象集的数组访问,请创建一个指针数组

    Class MyClass {
    public:
        MyClass(int par);
        SomeClass B0;
        SomeClass B1
        SomeClass* B[2];
    

    然后在你的构造函数中初始化指针:

    MyClass::MyClass(int par) :
      B0(123), B1(456)
    {
        B[0] = &B0;
        B[1] = &B1;
    }
    

    这对于少数对象来说显然是乏味的,但对于您可能在微控制器上执行的任何操作都很好。 现在你有了一个对象指针数组,可以根据需要使用:

    for(i=0; i<2; i++) {
        B[i]->foo();
    }
    

    请注意,您正在为指向每个对象的指针消耗额外的内存。

    【讨论】:

    • 谢谢@jdr5ca!这似乎是最好的方法,尽管这次我决定不要过多地摆弄指针:)。我假设指针不会占用与实际对象相同的内存?
    • 微控制器有16位地址空间,所以一个指针是2字节。在上面的例子中,总共 4 个字节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2011-08-08
    • 2013-03-30
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多