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

Strange function call in constructor c++

本文关键字:函数调用 c++ 构造函数      更新时间:2023-10-16

我正在对一台谜机进行编码,在为我的机器类创建构造函数时遇到了问题。尽管必须在构造函数的参数中提供插板,但似乎正在调用插板的构造函数。这是错误

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:

#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;
}

机器.h:

#ifndef MACHINE_H
#define MACHINE_H
#include <stdexcept>
#include <iostream>
#include <assert.h>
#include <list>
#include "Reflector.h"
#include "Rotor.h"
#include "Plugboard.h"
class Machine{
  public:
    Machine(std::list<Rotor> rots, Plugboard pb);   
    static int getPosition(char c);
    static char atPosition(int i);
    char encode(char c);
  private:
    std::list<Rotor> rotors;
    Plugboard plugboard;
};
#endif

这是因为在构造函数中,首先默认构造plugboard,然后复制赋值。只需在初始值设定项列表中构造即可。并接受const &的论点!

Machine(const std::list<Rotor>& rots, const Plugboard& pb)
: rotors(rots)
, plugboard(pb)
{ }