在具有引用成员的对象上创建指针?

时间:2017-10-30 09:14:37

标签: c++ pointers

我是C ++的学生初学者(但是在C上却有几个小时),我实际上遇到了在我的对象上使用指针的问题。我真的试图在网上找到信息,但它没有意义(毫无意义的指针,你明白了吗?!)。所以我在这里试试运气。

此代码现在编译!我向在你之前尝试代码的所有人道歉。编译:

g++ -Wall -o exec main.cc

 #include <iostream>
 #include <vector>

 //all the includes here
 using namespace std;

 class ExpLog
 {
 public: 
   virtual string toString() const=0;
   //virtual int evaluate() const=0;
 };


 class Atom : public ExpLog
 {    
 protected:
   int value;

 public:
   Atom():value(0){}
   string toString() const
   {
     return "a";//definition doesn't matter here
   } 

 };


 class ExpNot : public ExpLog
 {    
 protected:
   const ExpLog& opd; 

 public:
   ExpNot(const Atom& a):opd(a){}
   string toString() const
   {
     return "NOT"+opd.toString();
   }

 };

 const ExpLog *my_function(vector<Atom> const& vect_atom, int i)
 {
   if(i>= vect_atom.size()) return NULL;

   const Atom *a =  &vect_atom[i]       ;

   if(i>0) 
     return a;
   else{
     ExpNot *n;
     n = new ExpNot(*a);
     cout<<n->toString()<<endl; //This line leads to a seg:fault
     return n;         

   }
 }


 int main()
 {
   int i=-2;
   vector<Atom> vect_atom(3);

   my_function(vect_atom, i);
 }

1 个答案:

答案 0 :(得分:0)

正如其他人所说,此代码段不会以其当前形式进行编译。但是,我愿意猜测问题不在您指定的行中,而是行

const Atom *a =  &vect_atom[i]       

如果i > vect_atom.size()那么这将指向向量之外。尝试添加支票,就像检查i < 0一样。如果该检查匹配,则向上搜索根本原因:传递无效索引的调用者。