c++ - 在 if 语句中调用重载的构造函数失败

标签 c++ class constructor

所以我有一个 if 语句来决定是调用一个还是另一个构造函数。这是给我错误的代码:

detect::Wrapper detector;

if (detectorFileNameSpecified){
  detector = detect::Wrapper(detectorFileName,
             saveImages,
             learnOrDetect,
             verbosity);
}
else {
  detector = detect::Wrapper(saveImages,
             learnOrDetect,
             verbosity);
}

detector.setFind(findAlgNo);
detector.setLD(LDAlgNo);

detector.run();

g++ 给我这些错误:

main.cpp:126:15: error: use of deleted function ‘detect::Wrapper& detect::Wrapper::operator=(detect::Wrapper&&)’
      verbosity);
               ^
In file included from main.cpp:1:0:
wrapper.hpp:14:9: note: ‘detect::Wrapper& detect::Wrapper::operator=(detect::Wrapper&&)’ is implicitly deleted because the default definition would be ill-formed:
   class Wrapper{
         ^~~~~~~

但是,如果我以创建冗余代码的天真方式来做,它会完美地工作。

if (detectorFileNameSpecified){
      detect::Wrapper detector(detectorFileName,
                   saveImages,
                   learnOrDetect,
                   verbosity);

      detector.setFind(findAlgNo);
      detector.setLD(LDAlgNo);

      detector.run();
    }
    else {
      detect::Wrapper detector(saveImages,
                   learnOrDetect,
                   verbosity);

      detector.setFind(findAlgNo);
      detector.setLD(LDAlgNo);

      detector.run();
    }

我想做的就是减少代码中的冗余,而不必在每次需要不同的构造函数时都编写 .setFind() 等部分。我不确定如何解决这个问题。

最佳答案

通过创建函数:

void doJob(detect::Wrapper&& detector)
{
    detector.setFind(findAlgNo);
    detector.setLD(LDAlgNo);

    detector.run();
}

然后您可以将代码分解为:

if (detectorFileNameSpecified){
    doJob(detect::Wrapper(detectorFileName, saveImages, learnOrDetect, verbosity));
} else {
    doJob(detect::Wrapper(saveImages, learnOrDetect, verbosity));
}

关于c++ - 在 if 语句中调用重载的构造函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45841330/

相关文章:

c# - 在构造函数中注册事件?

c++ - 在 Windows 上使用 websocketpp 和 MySQL boost 构建错误

php - 找不到 fatal error RecursiveIteratorIterator

delphi - 为什么Delphi记录不能继承?

c++ - 方法/构造函数及其返回值

c++ - c++如何初始化一个对象?以下案例是否做了两次?

c++ - 平面YUV420数据布局

c++ - 远程嵌入式设备上带有核心文件的 GDB - 如何获取有关回溯的更多信息?

c++ - Visual Studio 6.0 C++ GlobalMemoryStatusEx(需要旧 SDK)

c# - 为什么 Scala 没有在匿名类型之间定义合理的相等性?