C++ C++;在具有ctor参数的类中实例化类

C++ C++;在具有ctor参数的类中实例化类,c++,class,C++,Class,我无法将一个类实例化为另一个类的成员。 这是我的密码: class myClassA{ public: myClassA(){ printf("myClassTwo ctor"); } void doSomething(){ printf("myClassA did something\r\n");} }; class myClassB{ public: myClassB(int i){ printf("myClassA ctor

我无法将一个类实例化为另一个类的成员。 这是我的密码:

class myClassA{
public:
    myClassA(){
        printf("myClassTwo ctor");
    }
    void doSomething(){ printf("myClassA did something\r\n");}
};

class myClassB{
public:
    myClassB(int i){
        printf("myClassA ctor got %d\r\n",i);
        threeMyI = i;
    }
private:
    int threeMyI;
};

class myClassC{
public:
    myClassC(){
        printf("C ctor without params\r\n");

    }
    myClassA instanceA;
    myClassB instanceB(29); //<== Not working why??

};
在我的主要功能中,这种声明很有效:

int main(void){

    printf("class test\r\n");
    myClassC instanceC1;

    myClassA instanceA1;
    myClassB instanceB1(25);

    return 0;
}
但是我不知道在实例化一个带有ctor参数的类时有什么大的区别。希望有人能告诉我我做错了什么。

你只能声明成员变量,不能实例化它们

要调用成员变量的构造函数,可以在自己的构造函数中使用memberwise初始化范例:

struct A { // same as class A but public by default
    int m_a;

    A(int a) : m_a(a) {}
};

struct B {
    A m_a;
    int m_b;

    B(int a, int b) : m_a(a), m_b(b) {}
};
或者使用您的代码:

#include <cstdio>


class myClassA{
public:
    myClassA(){
        printf("myClassTwo ctor");
    }
    void doSomething(){ printf("myClassA did something\r\n");}
};

class myClassB{
public:
    myClassB(int i) : threeMyI(i) {
        printf("myClassA ctor got %d\r\n",i);
    }
private:
    int threeMyI;
};

class myClassC{
public:
    myClassC() : instanceA(), instanceB(20) {
        printf("C ctor without params\r\n");

    }
    myClassA instanceA;
    myClassB instanceB;

};

int main()
{
    myClassA a;
    myClassB b(10);
    myClassC c;
}
#包括
类别myClassA{
公众:
myClassA(){
printf(“我的第二类公司”);
}
void doSomething(){printf(“myClassA做了某事\r\n”);}
};
类别myClassB{
公众:
myClassB(int i):3MyI(i){
printf(“myClassA获得%d\r\n”,i);
}
私人:
int-threeMyI;
};
类别myClassC{
公众:
myClassC():instanceA(),instanceB(20){
printf(“没有参数的C-ctor\r\n”);
}
myClassA instanceA;
myClassB实例B;
};
int main()
{
myClassA;
myClassB(10);
myClassC;
}

据我所知,您似乎希望为私有属性
instanceB
使用默认实例化。在这种情况下,您的建议是不合法的,默认输入参数应设置如下

myClassC() : instanceB(29) { // mind the ":" character 
    printf("C ctor without params\r\n");
}
这将影响调用
myClassB
的构造函数,用相关的默认参数实例化您的私有属性
instanceB

myClassB instanceB(29)//
myClassC() : instanceB(29) { // mind the ":" character 
    printf("C ctor without params\r\n");
}