C++-关于类vector成员的使用

小组事务管理 小组事务管理 主题:974 回复:1955

C++-关于类vector成员的使用

瑾兮 发布于 2017-04-10 字数 414 浏览 1219 回复 1
//简单代码
class Point;
class Mesh{
public:
vector<Point> points;
};
class ObjLoader{
public:
Mesh mesh;
void Load(){
Point p(1,2,3);
mesh.points.push_back(p);
}
}
void main(){
ObjLoader loader;
loader.load();
}
//显示运行到push_back的时候就报错了,这是为什么呢?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(1

虐人心 2017-05-15 1 楼

你的代码一个很重要的问题就是,类Point没有构造函数。既然没有构造函数,就不能这样来定义其类型的对象:load函数里面的Point p(1,2,3);
因此,你需要定义相应的构造函数。

我改写了一下你的代码,运行成功:

include <iostream>

include <vector>

using namespace std;

//简单代码
class Point
{
public:
Point(int value = 0):val(value)
{}
int getVal()
{
return val;
}

private:
int val;
};

class Mesh{
public:
vector<Point> points;
};

class ObjLoader{
public:
Mesh mesh;
void Load(){
Point p(1);
mesh.points.push_back(p);
}
};

int main()
{
ObjLoader loader;
loader.Load();
vector<Point>::iterator pos;
pos = loader.mesh.points.begin();

cout &lt;&lt; "loader : " &lt;&lt; (*pos).getVal() &lt;&lt; endl;

}

类的成员变量一般声明为private,我为了简便就直接这样写了么呵呵~你可以下去自己再修改修改~
运行结果(VS2008):

Update:
另外,比较重要的一点是,你的程序没有把成员变量声明为private的,这会导致很严重的问题的,建议你尽量将成员变量声明为private。原因可参考《Effective C++》-Scott Meyes 条款22.