gpt4 book ai didi

c++ - 改变 C++ 类构造函数参数的数量

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:29 25 4
gpt4 key购买 nike

我更喜欢 C 语言,但我目前正在从事 C++ 项目。这就是为什么我有点困惑:

我们有这样的继承:
Node->MultiNode->RoundAbout

现在是一些代码(为简单起见,除了构造函数,我几乎省略了所有代码):

class MultiNode : public sim_mob::Node {
public:
MultiNode(int x, int y) : Node(x, y) {}
...
}

class Roundabout : public sim_mob::MultiNode {
public:
Roundabout() : MultiNode() {}
}

如您所见,Roundabout() 构造函数调用 MultiNode() 构造函数时不带任何参数,而 MultiNode 只有一个带 2 个参数的构造函数:

MultiNode(int x, int y)

这样的场景可能吗?请解释一下是什么?

这段代码在原来的地方编译得很好,但是当我将文件夹复制到测试区域开始编辑时,我得到了这个错误(这对我来说是明智的):错误:没有匹配函数来调用‘sim_mob::MultiNode::MultiNode()

没有其他类似的文件或类可以怀疑放错了位置。

供您引用的错误:

~/workspace/parser5/geospatial$ make
Scanning dependencies of target driver
[ 33%] Building CXX object CMakeFiles/driver.dir/geo5-pskel.cxx.o
In file included from /home/vahid/workspace/parser5/geospatial/geo5-pskel.hxx:134:0,
from /home/vahid/workspace/parser5/geospatial/geo5-pskel.cxx:39:
/home/vahid/workspace/parser5/geospatial/Roundabout.hpp: In constructor ‘sim_mob::Roundabout::Roundabout()’:
/home/vahid/workspace/parser5/geospatial/Roundabout.hpp:34:27: **error: no matching function for call to ‘sim_mob::MultiNode::MultiNode()’**
/home/vahid/workspace/parser5/geospatial/Roundabout.hpp:34:27: note: candidates are:
/home/vahid/workspace/parser5/geospatial/MultiNode.hpp:42:2: note: sim_mob::MultiNode::MultiNode(int, int)
/home/vahid/workspace/parser5/geospatial/MultiNode.hpp:42:2: note: candidate expects 2 arguments, 0 provided
/home/vahid/workspace/parser5/geospatial/MultiNode.hpp:40:7: note: sim_mob::MultiNode::MultiNode(const sim_mob::MultiNode&)
/home/vahid/workspace/parser5/geospatial/MultiNode.hpp:40:7: note: candidate expects 1 argument, 0 provided
make[2]: *** [CMakeFiles/driver.dir/geo5-pskel.cxx.o] Error 1
make[1]: *** [CMakeFiles/driver.dir/all] Error 2
make: *** [all] Error 2

谢谢

最佳答案

不,您不能那样做,因为没有可用于 MultiNode 的默认构造函数。创建一个不接受任何参数的默认构造函数或向 MultiNode 构造函数提供一些默认参数。

 class MultiNode : public sim_mob::Node {
public:
MultiNode(int x, int y) : Node(x, y) {}
...
MultiNode(){
//....
}
};

 class MultiNode : public sim_mob::Node {
public:
MultiNode(int x = def_x, int y = def_y) : Node(x, y) {}
...
MultiNode(){
//....
}
};

关于c++ - 改变 C++ 类构造函数参数的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com