【发布时间】:2023-03-14 01:31:01
【问题描述】:
我有一个有几个对象作为成员变量的类。我不希望在声明时调用这些成员的构造函数,所以我试图明确地挂在指向对象的指针上。我不知道我在做什么。
我想也许我可以做以下事情,在初始化对象成员变量时立即调用构造函数:
class MyClass {
public:
MyClass(int n);
private:
AnotherClass another(100); // Construct AnotherClass right away!
};
但我希望MyClass 构造函数调用AnotherClass 构造函数。这是我的代码的样子:
文件 BigMommaClass.h
#include "ThingOne.h"
#include "ThingTwo.h"
class BigMommaClass {
public:
BigMommaClass(int numba1, int numba2);
private:
ThingOne* ThingOne;
ThingTwo* ThingTwo;
};
文件 BigMommaClass.cpp
#include "BigMommaClass.h"
BigMommaClass::BigMommaClass(int numba1, int numba2) {
this->ThingOne = ThingOne(100);
this->ThingTwo = ThingTwo(numba1, numba2);
}
这是我尝试编译时遇到的错误:
g++ -Wall -c -Iclasses -o objects/BigMommaClass.o classes/BigMommaClass.cpp
In file included from classes/BigMommaClass.cpp:1:0:
classes/BigMommaClass.h:12:8: error: declaration of âThingTwo* BigMommaClass::ThingTwoâ
classes/ThingTwo.h:1:11: error: changes meaning of âThingTwoâ from âclass ThingTwoâ
classes/BigMommaClass.cpp: In constructor âBigMommaClass::BigMommaClass(int, int)â:
classes/BigMommaClass.cpp:4:30: error: cannot convert âThingOneâ to âThingOne*â in assignment
classes/BigMommaClass.cpp:5:37: error: â((BigMommaClass*)this)->BigMommaClass::ThingTwoâ cannot be used as a function
make: *** [BigMommaClass.o] Error 1
我是否使用了正确的方法,但语法错误?还是我应该从不同的方向来?
【问题讨论】:
-
您只是想从那里调用它以便使用参数吗?
-
@chris,现在,我想这就是我要做的一切。但我也想知道如何做到这一点,假设我需要在传递参数之前做一些事情:比如添加“numba1”和“numba2”并将总和传递给成员变量构造函数。
-
好吧,您的直接错误是您正在将一个对象分配给一个指针(您需要一个
new,但无论如何还有更好的选择)。然而,手头的问题可以通过成员初始化器来解决。 -
私人:AnotherClass another(100); // 这立即构造了另一个类!可以?我的编译器确实不接受这一点,除非声明在函数内部。此行被解释为函数声明,编译器需要一个参数列表,而不是常量或变量。
标签: c++ constructor class-members object-construction