c++ - 编译器不喜欢 void :'( - function declaration

标签 c++ function compiler-construction types declaration

我正在尝试编写一个函数来更改一些文件夹名称,但我在实际声明中遇到了困难。

这是我的代码:

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/

相关文章:

c++ - 如何索引指向数组[队列]的指针数组?

c++ - 缩短运行时复杂度 (c++)

C++ 在运行时选择函数的问题

javascript - Uncaught ReferenceError : loadNext is not defined (anonymous function)

compiler-construction - 灵活的编译器管道定义

c++ - QFuture 无法为处于不同线程中的父对象创建子对象

c++ - Clang 3.1 C++11 用户定义的文字不起作用

function - ReactJS:使用 material-ui 获取多个复选框值

c - cl编译器(Visual Studio)在哪里生成LIB和EXP文件

regex - (a*+b*) 生成的字符串是什么类型