2015-12-12 29 views
-4

我對C++比較陌生。 我正在使用一個函數來給一個對象一些值,但我一直收到錯誤,說明該對象正在被使用而未被初始化。怎麼來的?正在使用的變量未經初始化C++

Worker定義:

class Worker 
    public: 
    int telephone; 
    char firstname[20]; 
    char task[100]; 
    int salary; 
    int id; 
}; 

的實際代碼:

Worker worker1; 
worker1 = getWorker(worker1); 

Worker getWorker(Worker worker){ 
    cout << "First name: "; 
    cin >> worker.firstname; 
    return worker; 
+5

「我在Java中做的基本相同」是的,正如您可能已經注意到的,它們不是相同的語言。 – Downvoter

+1

什麼是確切的診斷信息? 'Worker'是如何定義的? – Downvoter

+0

[用函數調用初始化靜態變量給出編譯錯誤?](http://stackoverflow.com/questions/12720400/initializing-static-variable-with-a-function-call-gives-compilation-error) – Superlokkus

回答

1

getWorker不需要參數。使用本地對象來獲取輸入,並返回它:

Worker getWorker() { 
    Worker worker; 
    // whatever 
    return worker; 
} 

此外,使用初始化,而不是創建對象,然後分配給他們的。像這樣:

Worker worker1 = getWorker(); 
0

由於您沒有明確設置姓名的值有可能是存儲在20個字節的任何垃圾的種類這構成了名字。字符緩衝區0終止的,所以最好的做法是讓一個初始值在默認構造函數姓:

Worker(){ 
    //omitting other code 
    firstname[0] = '\0'; 
} 

當然,如果你想要的變量來保存的實際值這將是最好將它傳遞進入構造函數。