Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 构造函数c+中奇怪的函数调用+;_C++_Constructor - Fatal编程技术网

C++ 构造函数c+中奇怪的函数调用+;

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(

我正在编写一台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::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引用传递并防止复制?