簡體   English   中英

編譯器不喜歡void:'( - 函數聲明

[英]Compiler doesn't like void :'( - function 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 ++教程網站,如果你想要一個函數不返回任何東西,那么你將它聲明為無效。 但是,當我這樣做時,我的編譯器說無效的初始化程序。 我正在使用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 ++。 這是一種相當棘手的語言。

幾件小事

當您發布代碼時,發布我們編譯它所需的所有內容:

// 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-String。 所以“刪除”是有效的。 但是星星*沒有意義。

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);

或者,如果你專門存儲字符串(不是字符blo),那么std :: string可能是你最好的選擇。

我認為你不能這樣做:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM