我正在尝试编写一个函数来更改一些文件夹名称,但我在实际声明中遇到了困难。
这是我的代码:
void ChangeVersion(char* NewVer)
{
ifstream show_current_version;
show_current_version.open(*removed*);
char show_current_version_var[1024];
if (show_current_version.is_open())
{
while (!show_current_version.eof())
{
show_current_version >> show_current_version_var;
}
}
show_current_version.close();
// show_current_version_var is old version
char OldVersion[1024] = show_current_version_var;
// start rename
cout << "Changing versions...";
rename("*removed*", OldVersion);
rename(NewVer, "*removed*");
cout << "done!" << endl;
}
如您所知,我是 c++ 的新手...
我在各种 C++ 教程网站上读到,如果您希望函数不返回任何内容,那么您可以将其声明为 void。但是,当我这样做时,我的编译器说初始化程序无效。我正在使用 dev-cpp。
我认为这是因为我的函数正在输出文本,但是在网站上,void 函数有一些 cout 语句...
我试过用 char* 初始化它,就像我的其他函数一样,但我得到了同样的错误。与 int 和 char 相同。
感谢阅读。
最佳答案
你真的应该仔细看看编译器的输出。它通常会告诉您哪一行包含错误,这为您提供了很多帮助。
解决特定问题的违规行(据我所知,还没有尝试编译)是:
char OldVersion[1024] = show_current_version_var;
您不能像那样将变量分配给静态数组。只有少数东西可以用来初始化静态数组。例如:
char OldVersion[1024] = "Static string";
char example[1024] = { 0 };
尝试做:
char OldVersion[1024];
strncpy(OldVersion, show_current_version_var, 1024);
// Null-terminate the string for good measure
OldVersion[1023] = 0;
或者只需使用 show_current_version_var
即可使用 OldVersion
(我认为没有理由复制您粘贴的代码中的字符串)。
无论如何,我不知道您想要完成什么,但您确实应该阅读 C++。这是一种使用起来相当棘手的语言。
关于c++ - 编译器不喜欢 void :'( - function declaration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8018680/