首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >名为error的纯虚方法

名为error的纯虚方法
EN

Stack Overflow用户
提问于 2012-08-21 04:42:32
回答 2查看 11.9K关注 0票数 3

我有以下定义:

代码语言:javascript
运行
复制
class PartitioningMethod {
public:
  virtual void addConstraints(ConstraintManager& cm) = 0;
  virtual bool hasMoreConstraints() = 0;
  virtual void setQuery(const Query& q) = 0;
  virtual ~PartitioningMethod(){ }
};


class Random : public PartitioningMethod {
private:
  vector< ref<Expr> > constraints;
  vector< ref<Expr> >::iterator it;
  vector< ref<Expr> >::iterator end;
  int numConstraints;
  RNG theRNG;

public:
  void setQuery(const Query& q) { 

    constraints.clear();

    //Set random number
    //srand ( unsigned ( time (NULL) ) * theRNG.getInt32() );
    srand ( theRNG.getInt32() );

    //Copy constraints    
    copy(q.constraints.begin(),q.constraints.end(),std::back_inserter(constraints));

    //Shuffle Randomly
    std::random_shuffle(constraints.begin(),constraints.end(), p_myrandom);

    it = constraints.begin();
    end = constraints.end();
    numConstraints = constraints.size();
  }

  void addConstraints(ConstraintManager& cm) {
    int step = rand() % numConstraints + 1;
    while(step != 0) {
      cm.addConstraint(*it);
      ++it;
      --step;
      --numConstraints;
    }   
  }

  bool hasMoreConstraints() {
    return it != end;
  }
};


bool PartitioningSolver::computeInitialValues(const Query& query,
                            const std::vector<const Array*> &objects,
                            std::vector< std::vector<unsigned char> > &values,
                            bool &hasSolution) {

  fprintf(stderr,"INIT\n");  
  // If there are no constraints in the query
  if(query.constraints.size() == 0 || query.constraints.size() == 1)
    return solver->impl->computeInitialValues(query, objects, values, hasSolution);

  // If the number constraints in the query are > 0 
  method->setQuery(query);

  ConstraintManager cm;
  ref<Expr> expr = query.expr;

  fprintf(stderr,"Begin partitioning\n");
  fprintf(stderr,"---------------------\n");  

  while(method->hasMoreConstraints()){
    fprintf(stderr, "HERE");
    //Add Constraints
    method->addConstraints(cm);

    //Construct a query
    Query temp_query(cm,expr);

     ExprPPrinter::printQuery(std::cerr,temp_query.constraints,temp_query.expr); 
     fprintf(stderr,"---------------------\n");

    //Query STP to check if satisfiable
    values.clear(); 

    if(!solver->impl->computeInitialValues(temp_query, objects, values, hasSolution))
      return false;

    //If not, return immediately (a win!) 
    if(!hasSolution)
      return true; 

    //If a solution is returned, check if the solution satisfies the entire set of constraints
    vector<const Array*> obj = objects;
    Assignment solution(obj, values);
    bool satisfiesAll = checkSolution(solution, query.constraints);

    //  fprintf(stderr,"Satisfies all: %i\n", satisfiesAll);

    // If it is successful, return the solution (a win again!), 
    if(satisfiesAll)
      return true;

    // If not add more constraints (if there is more) and repeat
  }
  return true;
}

分区求解器类的部分定义:

代码语言:javascript
运行
复制
class PartitioningSolver : public SolverImpl {
private:
  Solver*             solver;
  PartitioningMethod* method;
  bool checkSolution(Assignment& solution,  const ConstraintManager& constraints);  
public:
  PartitioningSolver(Solver *s,  PartitioningMethod* pm) : solver(s), method(pm) { }
  ~PartitioningSolver() { delete solver; delete method; }
};

很抱歉粘贴了这么长的代码片段,但我已经花了几个小时来处理它,并不断收到错误

代码语言:javascript
运行
复制
pure virtual method called
terminate called without an active exception

我不知道出了什么问题。fprintf(stderr,"Begin partitioning\n");所在的computeInitialValues函数似乎失败。我尝试添加打印语句作为最后的手段,但即使它们也不打印任何内容。任何想法都是值得感谢的。

编辑:

好的,我把Random的名字改为Ran,它开始工作了。我在动态地创建这个类实例作为新的Random()的参数,我猜它与另一个构造函数或其他我不知道的东西混淆了。

EN

Stack Overflow用户

发布于 2012-08-21 04:54:03

在一些代码中,您从构造函数中调用了一个纯虚函数,这些代码还没有包含给我们看。

When my base class's constructor calls a virtual function on its this object, why doesn't my derived class's override of that virtual function get invoked?

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12044819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档