我将类实例化为另一个类的成员时遇到问题。 这是我的代码:
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??
};
我有一个班级myClassC
我希望有两个成员,一个是myClassA
类型,另一个是myClassB
。这适用于myClassA
。但是一旦我尝试创建一个具有ctor参数的myClassB
实例,它就会因以下编译器错误而失败:
..\src\main.cpp:34:21: error: expected identifier before numeric constant
myClassB instanceB(29); //<== Not working why??
..\src\main.cpp:34:21: error: expected ',' or '...' before numeric constant
在我的主要功能中,这种声明效果很好:
int main(void){
printf("class test\r\n");
myClassC instanceC1;
myClassA instanceA1;
myClassB instanceB1(25);
return 0;
}
但我不知道在使用ctor参数实例化类时会有什么大不同。希望有人能给我一个提示我做错了什么。
答案 0 :(得分:0)
你只能声明成员变量,你无法实例化它们。
要调用成员变量的构造函数,可以在自己的构造函数中使用成员初始化范例:
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;
}
答案 1 :(得分:0)
根据我的理解,您似乎希望为私有属性instanceB
使用默认实例化。在这种情况下,您提议的不合法,默认输入参数应设置为
myClassC() : instanceB(29) { // mind the ":" character
printf("C ctor without params\r\n");
}
这样可以调用myClassB
的构造函数来实例化具有相关默认参数的私有属性instanceB
。