求教一个问题[c++语言]

C++语言 码拜 9年前 (2015-05-11) 966次浏览 0个评论
 

求教一个问题[c++语言]
如图
代码如下:

#include <iostream>
#include <list>
#include <cstdlib>
#include <string>
using namespace std;

int js = 0;
string *ace[20] = {0};
list<string> ::iterator iter;
void begin()
{
	cout << "**************************" << endl << "**************************" << endl <<
		"            你在一次冒险中迷路了。。。。。" << endl << "            余下的食物和水只能坚持2天。。。。" << endl
		<< "            3天时间,出不去便是死亡!" << endl << "            (提示:每做出一次行动都会消耗0.5天的补给)"
		<< endl << endl << endl << endl << endl << endl << endl << endl;
}

void p_ing()
{
	list<string> a;

	a.push_front("不前进是不行的\n");                                           //1
	a.push_back("发现武器,这对野兽或许有点用,但会占用自身能带的东西\n");      //2
	a.push_back("什么东西都没发现,希望能早点出去。\n");                        //3
	a.push_back("这里好像来过。\n");                                            //4
	a.push_back("这是什么,野兽的毛发?\n");                                    //5
	a.push_back("咦,这是什么?\n噢,感谢上帝,有食物!\n");                    //6
	a.push_back("滚开,该死的东西\n");                                          //7
	a.push_back("你看见一只野狼\n");                                            //8
	a.push_back("这里居然还有药品");                                            //9
	a.push_back("这里也没有东西,该死,出路在哪?\n");                          //10
	a.push_back("出口!出口!上帝,我出来了!\n");                              //11   
	a.push_back("没想到,我居然会死在这里。。。。\n");                          //12
	a.push_back("制作:zeroyetj,谢谢游戏!\n");                                 //13


	int i = 0;
	for (iter = a.begin(); iter != a.end(); iter++, i++)
	{
		js += 1;
		*ace[i] = *iter;
	}
}

void f_1()
{
	int a;
	*iter = *ace[1];
	cout << *iter << endl;
	cout << "1:向前走。";
	cin >> a;
	switch (a)
	{
	case 1:void f_2(); break;

	}
}

void f_2()
{
	int a;
	*iter = *ace[2];
	cout << *iter << endl;
	cout << "1:向左走。" << "2:向右走。";
	cin >> a;
	switch (a)
	{
	case 1:void f_3(); break;
	case 2:void f_4(); break;
	}
}


void f_3()
{
	int a;
	*iter = *ace[3];
	cout << *iter << endl;
	cout << "1:向前走。" << "2:向左走。" << "3:向后走。";
	cin >> a;
	switch (a)
	{
	case 1:void f_5(); break;
	case 2:void f_6(); break;
	case 3:void f_2(); break;
	}
}







int main()
{
	begin();
	p_ing();
    cin.get();
	f_1();
}

还没有写完,想先运行一下,结果。。。。
求各位大神解答下。

指针或迭代器未初始化
引用 1 楼 zhangxiangDavaid 的回复:

指针或迭代器未初始化

我应该都初始化了啊,指针为0,迭代器为list里第一个元素

引用 2 楼 zeroyetj 的回复:
Quote: 引用 1 楼 zhangxiangDavaid 的回复:

指针或迭代器未初始化

我应该都初始化了啊,指针为0,迭代器为list里第一个元素

确定都有初值?

引用 3 楼 zhangxiangDavaid 的回复:
Quote: 引用 2 楼 zeroyetj 的回复:
Quote: 引用 1 楼 zhangxiangDavaid 的回复:

指针或迭代器未初始化

我应该都初始化了啊,指针为0,迭代器为list里第一个元素

确定都有初值?

        有啊
        for (iter = a.begin(); iter != a.end(); iter++, i++)
{
js += 1;
*ace[i]=*iter;
}
不知道是不是这段代码的原因

10分
下断点,调试
引用 5 楼 zhangxiangDavaid 的回复:

下断点,调试

好像没什么用啊,他会自动打开一个头文件,然后显示下面的代码
if (this->_Myres < _Newsize)
_Copy(_Newsize, this->_Mysize); // reallocate to grow
else if (_Trim && _Newsize < this->_BUF_SIZE)
_Tidy(true, // copy and deallocate if trimming to small string
_Newsize < this->_Mysize ? _Newsize : this->_Mysize);
else if (_Newsize == 0)
_Eos(0); // new size is zero, just null terminate
return (0 < _Newsize); // return true only if more work to do
}

你的ace数组内保存的是string*内型的元素,但是你却尝试赋string型的值给它.
10分
*ace[i] = *iter;

改成

ace[i] = new string(*iter);
引用 8 楼 iyomumx 的回复:
*ace[i] = *iter;

改成

ace[i] = new string(*iter);

  谢谢,一直有事耽搁了,这样一来好像整个程序都要改的样子
  


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求教一个问题[c++语言]
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!