C++ 构造函数c+中奇怪的函数调用+;
我正在编写一台enigma机器,在为我的机器类创建构造函数时遇到了问题。似乎正在调用plugboard的构造函数,尽管构造函数的参数中必须提供plugboard。这里是错误C++ 构造函数c+中奇怪的函数调用+;,c++,constructor,C++,Constructor,我正在编写一台enigma机器,在为我的机器类创建构造函数时遇到了问题。似乎正在调用plugboard的构造函数,尽管构造函数的参数中必须提供plugboard。这里是错误 Machine.cpp: In constructor ‘Machine::Machine(std::list<Rotor>, Plugboard)’: Machine.cpp:6:48: error: no matching function for call to ‘Plugboard::Plugboard(
Machine.cpp: In constructor ‘Machine::Machine(std::list<Rotor>, Plugboard)’:
Machine.cpp:6:48: error: no matching function for call to ‘Plugboard::Plugboard()’
Machine::Machine(list<Rotor> rots, Plugboard pb) {
Machine.cpp:在构造函数“Machine::Machine(std::list,Plugboard)”中:
Machine.cpp:6:48:错误:调用“Plugboard::Plugboard()”没有匹配的函数
机器::机器(列表ROT、插接板pb){
Machine.cpp:
#include "Machine.h"
using namespace std;
Machine::Machine(list<Rotor> rots, Plugboard pb) {
plugboard = pb;
rotors = rots;
}
//give c's alphabet index
int Machine::getPosition(char c) {
if (c >= 'A' && c <= 'Z') {
return c - 'A';
}
else {
cout << "not an accepted character";
return -1;
}
}
//give letter at index i in alphabet
char Machine::atPosition(int i) {
assert(i>=0 && i<=25);
return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i];
}
char Machine::encode(char c) {
assert(c >= 'A' && c <= 'Z');
//plugboard
c = plugboard.getMatch(c);
//forward pass through rotors
c = rotors[0].process(c);
//reflector
c = Reflector::reflect(c);
//backwards pass through rotors
c = rotors[0].processInverse(c);
return c;
}
#包括“Machine.h”
使用名称空间std;
机器::机器(列表ROT、插接板pb){
插板=pb;
转子=转子;
}
//给出c的字母索引
int机器::getPosition(字符c){
如果(c>='A'&&c,那是因为在构造函数中,您首先默认构造插件板,然后复制赋值。只需在初始值设定项列表中构造它。并通过常量&
获取参数
Machine(const std::list<Rotor>& rots, const Plugboard& pb)
: rotors(rots)
, plugboard(pb)
{ }
Machine(const std::list&rots、const Plugboard&pb)
:转子(转子)
,插板(pb)
{ }
这是因为在构造函数中,您首先默认构造插件板,然后复制并分配它。只需在初始值设定项列表中构造它。然后按常量获取参数&
Machine(const std::list<Rotor>& rots, const Plugboard& pb)
: rotors(rots)
, plugboard(pb)
{ }
Machine(const std::list&rots、const Plugboard&pb)
:转子(转子)
,插板(pb)
{ }
谢谢你的回答。我以前看过这个初始值设定项列表语法,但假设它与我使用的java风格赋值相同。你能解释一下const&?@AdrianRothan的用法以避免复制吗?如果你按值传递列表,它将被复制两次-一次复制到构造函数中,然后再次复制到转子中。
y、 你只得到一份副本。谢谢你的回答。我以前见过这个初始值设定项列表语法,但假设它与我使用的java风格赋值相同。你能解释一下使用const&?@AdrianRothan来避免副本吗?如果你按值传入列表,它将被复制两次-一次进入构造函数,然后再次进入rotors
。这样,你只会得到一个副本。你会复制转子列表两次。为什么?我不确定你指的是什么?你的构造函数会通过值传递列表,这会产生一个副本。然后它会将副本复制到成员变量中。为什么不通过常量引用传递并阻止复制?你会复制转子列表两次。为什么?我不确定你是什么eferring to构造函数通过值传递列表,从而生成一个副本。然后它将副本复制到成员变量中。为什么不通过const引用传递并防止复制?