编辑:我也得到了一个答案,让扇区成为矢量的载体:
vector<vector<char>>sector;
然后摆脱了我的其余错误。
编辑:我已经按照某人的建议制作了一个指针数组,但仍然有三个错误: 编辑:我编辑了该程序,但它没有修复所有错误:我有一个程序的这一部分:
char* load_data(int begin_point,int num_characters);
ifstream mapdata("map_data.txt");
const int maxx=atoi(load_data(0,2));
const int maxy=atoi(load_data(2,2));
char** sector=new char[maxx][maxy];
char* load_data(int begin_point,int num_characters)
{
seekg(begin_point);
char* return_val=new char[num_characters+1];
mapdata.getline(return_val,num_characters);
return return_val;
}
我得到了这些错误:
第5行&gt;错误C2540:非常量表达式为数组绑定
第5行&gt;错误C2440:'初始化':无法从'char(*)[1]'转换为'char **'
第14行&gt;错误C3861:'seekg':未找到标识符
per seekg:是的我知道我必须包含fstream,我包括在main.cpp中,这是一个单独的.h文件,也包含在main.cpp中。
如何修复错误?具体来说,如何在保持所有变量全局的同时修复错误?
此外,如果有帮助,这是map_data.txt:
10
10
00O
99!
1
55X
19
What is a question?
18
This is an answer
1
1
2
1
答案 0 :(得分:0)
您无法返回指向堆栈变量的指针。并且需要将数组作为指针类型返回。
尝试:
char* load_data(int begin_point,int num_characters)
{
seekg(begin_point);
char* return_val = new char[num_characters+1];
mapdata.getline(return_val, num_characters);
return return_val;
}
char* foo = load_data(...);
...
delete [] foo;
答案 1 :(得分:0)
好吧,
function load_data(int,int)返回一个char。 您将该char传递给atoi函数,该函数采用char *。除此之外,你可能不包括stdlib.h头文件!!
#include <cstdlib>
int atoi(const char*);
如果你不想包含stdlib.h,那么你可以将atoi声明为extern,但是在编译这个模块时要注意。
extern int atoi(const char*)
考虑到atoi函数的参数必须是以空字符结尾的字符串。
为了使你的代码能够工作,你应该让函数加载数据返回char *,而不是char。
char* load_data(int,int);
所以,现在你可以做到
//notice these aren't const, they rely on non-compile time available data.
int maxx = atoi (load_data(....));
int maxy = atoi (load_data(....));
如果您使用的是C ++,则load_data函数可以返回std :: string。
std::string load_data(int,int)
然后使用c_str()方法,它从C ++字符串返回一个C-String。
const char* std::string:c_str()
int maxx = atoi(load_data(....).c_str());
int maxy = atoi(load_data(....).c_str());
除此之外,你不应该
(关于
line 5>error C2540: non-constant expression as array bound
line 5>error C2440: 'initializing' : cannot convert from 'char (*)[1]' to 'char **'
)
char sector[maxx][maxy];
你应该
char** sector = new char[maxx][maxy]();
并且别忘了释放这段记忆
delete[](sector);
答案 2 :(得分:0)
我不太确定你锻炼的目标是什么。但是如果你想从文件中读取'stuff'并以你期望的格式获得它(比如int,strings ...),你可以使用operator&gt;&gt;和getline这样:
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream ifs("data.txt");
if (!ifs.is_open()) return 0;
int maxx;
int maxy;
ifs >> maxx >> maxy;
cout << maxx << " " << maxy << endl;
// ----
char OO_0[4]; // can use char[] or string, see next
ifs >> OO_0;
OO_0[sizeof(OO_0)] = 0;
cout << OO_0 << endl;
// ----
string _99;
ifs >> _99;
cout << _99 << endl;
int one;
string _55_X;
int _19;
string what_is;
ifs >> one >> _55_X >> _19 >> ws;
// ws gets rid of white space at the end of the line ...
// this is because getline would only read that ws up to eol
getline(ifs,what_is);
cout << one << " " << _55_X << " " << _19 << " " << what_is << endl;
ifs.close();
}
你得到这样的输出:
10 12
00O
99!
1 55X 19 What is a question?
那是你的追求吗?注意:我使用的是c ++,因为我注意到你提到了“main.cpp”