我定义了如下的一个类(其他成员函数省略)
class VTMesh {
public:
//Constructor
VTMesh(){}
VTMesh(double x, double y, double z)
{
_verts[0] = x;
_verts[1] = y;
_verts[2] = z;
}
          double _verts[3];
};
之后定义了一个存放类对象指针的容器 vector <VTMesh *> _vertices;
接下来我进行如下操作
VTMesh *v = &VTMesh(v_x, v_y, v_z);
_vertices.push_back(v);
当运行到push_back()时程序报错了,大神们为什么呢?
第一次求助轻拍~~

解决方案 »

  1.   

    VTMesh *v = &VTMesh(v_x, v_y, v_z);
    改为
    VTMesh *v = new VTMesh(v_x, v_y, v_z);
      

  2.   


    还是不行啊~~我调试的时候v初始化对的,运行到push_back()的时候就会跳出来对话框
    Unhandled   exception   in   ***.exe:   0xC0000005:   Access   Violation 
      

  3.   

    你报错应该不是在pushback报错
    我用你同样的代码也没有错,不过要注意的地方是需要NEW出来再传指针,否则在使用的时候会报错,你的异常估计也是这里!
      

  4.   

    class VTMesh {
    public:
    //Constructor
    VTMesh(){}
    VTMesh(double x, double y, double z)
    {
    _verts[0] = x;
    _verts[1] = y;
    _verts[2] = z;
    }


    //Functions for accessing data
    double get_vert(unsigned int i) const { return _verts[i]; }
    void add_vert(unsigned int vid, double value){ _verts[vid] = value; } double _verts[3];
    private:
    };class TMesh  
    {
    public:
    TMesh();
    virtual ~TMesh(); //Functions for Creation
    void ReadOffFile(char *filename);

    //Functions for output 
    void OutMeshOffFile(char *filename);

    //Function for accessing data
    unsigned int v_count() const { return _vertices.size(); } void add_vertex(VTMesh *v)
    {
    _vertices.push_back(v);
    } //Clear
    void clear()
    {
    _vertices.clear();
    _facets.clear();
    }
    vector <VTMesh *> _vertices;
    private:
    };
    以上为TMesh.h文件以下为TMesh.cpp文件
    TMesh::TMesh()
    {}TMesh::~TMesh()
    {}void TMesh::ReadOffFile(char *filename)
    {
    ifstream ifile(filename);
    if (!ifile)
    {
    return;
    }
    string line;
    string str;
    int i=0; int v_size;
    int f_size;
    int color;
    //off文件格式:第一行以off打头,第二行点数和面数,第三行开始是点,接着是面上的点的序号。
    while(i < 2)
    {
    getline(ifile,line);
    i++;
    }
    istringstream isstr(line);
    isstr>>v_size>>f_size>>color; double v_x, v_y, v_z;
    for(; i < v_size+2;)
    {
    getline(ifile,line);
    istringstream isvert(line);
    isvert >> v_x >> v_y >> v_z;
    VTMesh *v = new VTMesh(v_x, v_y, v_z);
    add_vertex(v);
    i++;
    }
    }问题出在红色部分
      

  5.   


    最后光标指在了vector库的
    iterator end()
           {return (_Last); }
    调试的时候能看到指针已经赋值过了
      

  6.   

    VTMesh *v = &VTMesh(v_x, v_y, v_z);
    不应该用无名对象吧? 是不是应该构造一个有名对象,然后取对象的地址啊?
      

  7.   

    VTMesh *v = &VTMesh(v_x, v_y, v_z);右边的对象应该是个临时对象,就是这句话运行完了,就析构了。所以指针变为一个无效的指针。由于是堆上面的,碰巧还可能不会出错。但千万别这么用。其他的地没发现什么问题。