C++ 错误:构造函数委托给它自己解决问题

C++ 错误:构造函数委托给它自己解决问题,c++,constructor,C++,Constructor,在这一点上,我有错误消息“error:constructor委托给它自己”。有什么问题吗 在我将第一个函数更改为 #include "RandomGeneratorNAG.h" RandomGeneratorNAG::RandomGeneratorNAG():RandomGeneratorNAG() { } /** Standard constructor. * \param seed Seed for the randomGenerator */ RandomGeneratorNAG:

在这一点上,我有错误消息“error:constructor委托给它自己”。有什么问题吗

在我将第一个函数更改为

#include "RandomGeneratorNAG.h"
RandomGeneratorNAG::RandomGeneratorNAG():RandomGeneratorNAG()  {
}

/** Standard constructor.
 * \param seed Seed for the randomGenerator
 */
RandomGeneratorNAG::RandomGeneratorNAG(int seed) {
    g05cbc(seed);
}

/** Standard destructor.
 *
 */
RandomGeneratorNAG::~RandomGeneratorNAG() {
}
我收到了错误信息

错误:没有用于调用的匹配函数 “RandomGenerator::RandomGenerator()”

再次强调这一点

RandomGeneratorNAG.h如下所示

RandomGeneratorNAG::RandomGeneratorNAG(){
}
#ifndef RANDOMGENERATOR_RANDOMGENERATORNAG_H_
#define RANDOMGENERATOR_RANDOMGENERATORNAG_H_

#include "RandomGenerator.h"


/// To use this class, you must have WITH_NAG enabled in CMake.
class RandomGeneratorNAG: public RandomGenerator {
public:
    RandomGeneratorNAG();
        explicit RandomGeneratorNAG(int seed);
    virtual ~RandomGeneratorNAG();

    void getUniformRandomInt(int lowerBound, int upperBound, int* randNumber) ;
    void getUniformRandomInt(int lowerBound, int upperBound, std::vector<int>* randNumbers, std::size_t  size) ;
    void getUniformRandomDouble(double lowerBound, double upperBound, double* randNumber) ;
    void getUniformRandomDouble(double lowerBound, double upperBound, std::vector<double>* randNumbers, std::size_t  size) ;

    void getNormalRandomInt(double mu, double sigma, int* randNumber) ;
    void getNormalRandomInt(double mu, double sigma, std::vector<int>* randNumbers, std::size_t  size) ;
    void getNormalRandomDouble(double mu, double sigma, double* randNumber) ;
    void getNormalRandomDouble(double mu, double sigma, std::vector<double>* randNumbers, std::size_t  size) ;
};

#endif /* RANDOMGENERATOR_RANDOMGENERATORNAG_H_ */
\ifndef random generator\u random generator nag\H_
#定义RANDOMGENERATOR\u RANDOMGENERATORNAG\u H_
#包括“RandomGenerator.h”
///要使用此类,必须在CMake中启用WITH_NAG。
类RandomGeneratorNAG:公共随机生成器{
公众:
随机生成ornag();
显式随机生成ornag(int-seed);
虚拟~RandomGeneratorNAG();
void getUniformRandomInt(整数下限、整数上限、整数*随机数);
void getUniformRandomInt(int-lowerBound,int-upperBound,std::vector*randNumbers,std::size\u t size);
void getuniformrandouble(双下界、双上界、双*随机数);
void getuniformrandouble(双下界,双上界,std::vector*randNumbers,std::size\u t size);
void getNormalRandomInt(双mu,双西格玛,int*randNumber);
void getNormalRandomInt(双mu,双西格玛,标准::向量*随机数,标准::大小\u t大小);
void getNormalRandomDouble(双mu、双西格玛、双*随机数);
void getNormalRandomDouble(双mu,双西格玛,标准::向量*随机数,标准::大小\u t大小);
};
#endif/*随机生成器*/
另外,RandomGenerator.h如下所示

RandomGeneratorNAG::RandomGeneratorNAG(){
}
#ifndef RANDOMGENERATOR_RANDOMGENERATORNAG_H_
#define RANDOMGENERATOR_RANDOMGENERATORNAG_H_

#include "RandomGenerator.h"


/// To use this class, you must have WITH_NAG enabled in CMake.
class RandomGeneratorNAG: public RandomGenerator {
public:
    RandomGeneratorNAG();
        explicit RandomGeneratorNAG(int seed);
    virtual ~RandomGeneratorNAG();

    void getUniformRandomInt(int lowerBound, int upperBound, int* randNumber) ;
    void getUniformRandomInt(int lowerBound, int upperBound, std::vector<int>* randNumbers, std::size_t  size) ;
    void getUniformRandomDouble(double lowerBound, double upperBound, double* randNumber) ;
    void getUniformRandomDouble(double lowerBound, double upperBound, std::vector<double>* randNumbers, std::size_t  size) ;

    void getNormalRandomInt(double mu, double sigma, int* randNumber) ;
    void getNormalRandomInt(double mu, double sigma, std::vector<int>* randNumbers, std::size_t  size) ;
    void getNormalRandomDouble(double mu, double sigma, double* randNumber) ;
    void getNormalRandomDouble(double mu, double sigma, std::vector<double>* randNumbers, std::size_t  size) ;
};

#endif /* RANDOMGENERATOR_RANDOMGENERATORNAG_H_ */
\ifndef\u随机发生器\u水电站_
#定义\u随机发生器\u水电站_
#包括
#if-BUILD\u测试
//必须包括使用googleTest测试私有函数
#包括“gtest/gtest_产品h”
#恩迪夫
#包括“./Parameter/Parameter.h”
#包括“./Writer/Writer.h”
类随机发生器{
#if-BUILD\u测试
FRIEND_试验(随机生成试验、种子试验);
#恩迪夫
受保护的:
int种子;
静态int createSeed();
公众:
虚拟随机发生器();
随机发生器(int-seed);
int getSeed(){return seed;}
静态随机发生器*工厂(参数*参数,写入器*写入器);
虚空getUniformRandomInt(int下限,int上限,int*randNumber)=0;
虚空getUniformRandomInt(int lowerBound,int upperBound,std::vector*randNumbers,std::size\u t size)=0;
虚空GetUniformRandomDuble(双下界、双上界、双*随机数)=0;
虚空GetUniformRandomDuble(双下界,双上界,标准::向量*随机数,
std::size\u t size)=0;
虚空getNormalRandomInt(双mu,双西格玛,int*randNumber)=0;
虚空getNormalRandomInt(双mu,双西格玛,标准::向量*随机数,标准::大小\u t大小)=0;
虚空getNormalRandomDouble(双mu,双西格玛,双*随机数)=0;
虚空getNormalRandomDouble(双mu,双西格玛,标准::向量*随机数,标准::大小\u t大小)=0;
};
#恩迪夫

默认构造函数在成员初始化列表中调用自身,这将导致无限循环(假设编译器允许,显然不是这样):

如果您的默认ctor根本不需要执行任何初始化,只需通过删除初始化来修复此问题

RandomGeneratorNAG::RandomGeneratorNAG() : RandomGeneratorNAG() {}
//                                       ^^^^^^^^^ Doesn't work
这是错误的。
:RandomGeneratorNAG()
位不正确。该语法用于调用另一个构造函数。在您的情况下,它就是您委托给的同一个构造函数。它将导致一个无限循环。也许是打字错误。从代码中删除该部分并使用:

RandomGeneratorNAG::RandomGeneratorNAG():RandomGeneratorNAG()
{
}
如果要使用种子值为
0
的其他构造函数,请使用:

RandomGeneratorNAG::RandomGeneratorNAG()
{
}
您可以在和上阅读有关委派构造函数的更多信息

更新,回应OP的评论 相当于

RandomGeneratorNAG::RandomGeneratorNAG()
{
}
由于基类没有默认构造函数,编译器在该行报告错误

您可以通过以下方式解决此问题:

  • 向基类添加默认构造函数,或
  • 正在删除派生类中的默认构造函数,或
  • 更改派生类的默认构造函数的实现

    // The default constructor of the base class is called.
    RandomGeneratorNAG::RandomGeneratorNAG() : RandomGenerator() 
    {
    }
    

  • 谢谢你留下我的答案……但是之后,我有一个错误:“调用NoRealGuang::RealNoigAuthor”没有匹配函数。“我怎么解释这个?”HannahLee,这可能是因为你的类没有声明一个默认构造函数。@ R SaHu,请指定C++初学者的意思??我改为RandomGenerator(int见){},但是仍然出现错误..您上次的编辑不好。他们让答案看起来毫无意义。@R Sahu,很抱歉……但问题仍然存在……所以我编辑了它……您的错误消息与帖子不匹配(它缺少
    NAG
    部分),这是发布的代码中的错误,还是有另一个类,
    RandomGenerator
    ,存在此问题?@kmdreko,我添加了RandomGenerator.h代码..假设其中有问题..或者我应该再次重复这些问题吗?
    // The default constructor of the base class is called.
    RandomGeneratorNAG::RandomGeneratorNAG() : RandomGenerator() 
    {
    }
    
    RandomGeneratorNAG::RandomGeneratorNAG() : RandomGenerator(0) 
    {
    }