我是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);
}
答案 0 :(得分:0)
正如其他人所说,此代码段不会以其当前形式进行编译。但是,我愿意猜测问题不在您指定的行中,而是行
const Atom *a = &vect_atom[i]
如果i > vect_atom.size()
那么这将指向向量之外。尝试添加支票,就像检查i < 0
一样。如果该检查匹配,则向上搜索根本原因:传递无效索引的调用者。