我一直在尝试弄清楚c ++如何处理多个对象,以及构造函数采用相互设置的值。
#include <iostream>
using namespace std;
class Inner {
int myvar;
public:
Inner(int input) {
myvar = input;
}
int output() {
return myvar;
}
};
class Outer {
Inner inner;
public:
Outer(int input) {
Inner inner(input);
}
int value_out() {
return inner.output();
}
};
int main() {
int myvar = 0;
Outer outer(myvar);
cout << outer.value_out() << endl;
return 0;
}
我进行编译时的控制台输出:
ubuntu@ubuntu:~$ cd Desktop
ubuntu@ubuntu:~/Desktop$ touch test.cpp
ubuntu@ubuntu:~/Desktop$ g++ test.cpp -o test
test.cpp: In constructor ‘Outer::Outer(int)’:
test.cpp:19:20: error: no matching function for call to ‘Inner::Inner()’
Outer(int input) {
^
test.cpp:19:20: note: candidates are:
test.cpp:7:3: note: Inner::Inner(int)
Inner(int input) {
^
test.cpp:7:3: note: candidate expects 1 argument, 0 provided
test.cpp:4:7: note: Inner::Inner(const Inner&)
class Inner {
^
test.cpp:4:7: note: candidate expects 1 argument, 0 provided
ubuntu@ubuntu:~/Desktop$
我是C ++的新手,所以只是希望对所有内容如何落入更好的了解。我来自像python和ruby这样的脚本语言,其中很多是自动完成的。谢谢你的帮助!
这是我要在Ruby中尝试做的事情,如果这有助于更好地弄清楚我在这里要做什么。
class Inner
def initialize(input)
@myvar = input
end
def output
@myvar
end
end
class Outer
def initialize(input)
@inner = Inner.new(input)
end
def value_out
@inner.output
end
end
myvar = 0
outer = Outer.new(0)
puts outer.value_out
因此,我想我的问题的核心是如何编写一个对象,该对象具有默认构造函数作为另一个对象的成员变量,因为如果我为成员变量分配任何内容,C ++都会出错。那么,如果一个对象中的一个对象的成员变量是另一个对象的成员变量,那么该对象又该如何输入呢?这是否有可能或者我是否正在尝试做一些非常愚蠢和糟糕的事情?
最佳答案
我认为您对构造函数主体中使用的成员变量inner
和inner
有点困惑
在您的构造函数主体中,
Outer(int input) {
Inner inner(input);
}
变量
inner
不是类成员。它是函数范围内的局部变量。要初始化类成员,您将需要使用:Outer(int input) : inner(input) {}