我正在编写一个编程项目列表,而这个项目是制作15个拼图(幻灯片拼图)的。当我遇到一个小障碍时,我正在从事该项目。
我的代码编译得很好,但是当我运行它时,在第12行出现了分段错误: pos[0] = x;
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
class Tile{
private:
vector<int> pos;
int value;
public:
Tile(int x, int y, int value_){
pos[0] = x;
pos[1] = y;
value = value_;
}
~Tile(){}
int getPos(int a){return pos[a];}
void setPos(int a, int b){pos[a] = b;}
};
int main(){
Tile tile1(1, 2, 10);
Tile* t1;
t1 = &tile1;
// returns position "x"
cout << t1->getPos(0);
return 0;
}
我的意思是,我可以不必使用向量/数组来处理整个项目就可以完成整个项目,但是我仍然想知道,就我自己的理解而言,这为什么行不通。
基于我运行的调试,程序在初始化pos []向量的值时遇到了麻烦。
另一个问题:可能相关,我尝试在实例化矢量时设置其大小。
vector<int> pos(2);
但是然后我得到调试错误:
error: expected identifier before numeric constant
不知道这是怎么回事。我已经尝试了很多不同的方法,但是似乎无法弄清楚为什么向量不能在类内部工作。
我敢肯定,有一百种方法可以使这件小作品做得更好,我很想知道您会如何解决它,但是我还需要知道什么地方出了问题,特别是在我写的内容中并尝试了。
谢谢。
我试图在实例化时设置矢量的大小。
vector<int> pos(2);
但是然后我得到调试错误:
error: expected identifier before numeric constant
那是编译错误,不是调试错误。
您不能像这样初始化成员。但是,您可以(并且应该)使用父构造函数对其进行初始化:
Tile(int x, int y, int value_)
: pos(2)
{
pos[0] = x;
pos[1] = y;
value = value_;
}
当前,您只是将向量留空,然后访问(并写入!)不存在的元素。
无论如何,您真的不想要向量:这是很多动态分配。一个好的数组怎么样?或仅两个int
秒。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句