编译器不喜欢 void :'( - 函数声明

问题描述 投票:0回答:3

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

这是我的代码:

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 相同。

c++ function types declaration
3个回答
1
投票

您确实应该仔细查看编译器的输出。它通常会告诉您哪一行包含错误,这为您提供了很多工作空间。

解决特定问题,有问题的行(根据我收集的信息,尚未尝试编译)是:

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++。这是一种使用起来相当棘手的语言。


1
投票

一些小事

当您发布代码时,请发布我们编译它所需的所有内容:

// You need these to make it compile.
#include <iostream>
#include <fstream>

using namespace std;

好的。错误:

show_current_version.open(*removed*);
                          ^^^^^^^^^   What is this supposed to be ?

该函数需要一个 C 字符串。所以“删除”是有效的。但星星

*
没有意义。

char OldVersion[1024] = show_current_version_var;

你不能像这样复制数组:

char OldVersion[1024];
std::copy(show_current_version_var, show_current_version_var+1024, OldVersion);

更好的是使用 std::vector 而不是数组。然后就可以复制了。

std::vector<char>   show_current_version_var(1024);
// STUFF
std::vector<char>   OldVersion(show_current_version_var);

或者,如果您专门存储字符串(而不是字符块),那么 std::string 可能是您最好的选择。


0
投票

我认为你做不到:

char OldVersion[1024] = show_current_version_var;

您只能使用大括号列表初始化数组(例如

{'p', 'a', 'x'}
)。

相反,你应该尝试:

char OldVersion[1024];
memcpy (OldVersion, show_current_version_var, sizeof (OldVersion));

完整的、可编译的版本如下所示:

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
void ChangeVersion(char* NewVer)
{
    ifstream show_current_version;
    show_current_version.open("qqq");
    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];
    memcpy (OldVersion, show_current_version_var, sizeof (OldVersion));

    // start rename
    cout << "Changing versions...";
    rename("*removed*", OldVersion);
    rename(NewVer, "*removed*");
    cout << "done!" << endl;
}

int main() {
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.