2014-01-07 41 views
0

我寫在主要的下一個代碼:獲得一個「字符」,而期待「爲const char」

int main{ 

    Employee *employee1 = NULL; 

    char *empName1=NULL; 

    char *workHours[7]; 

    for (int ii=0;ii<7;ii++) 
    { 
     workHours[ii] = new char[5]; 
    } 


    if (empName1 != NULL) {delete empName1;} 
      empName1 = new char[y_str-x_str]; 

    // I read "workHours[ii]" from the stdin using strncpy 
    // here There's a block of code that is irrelevant to my question... 
    //...... 
    //.. 

    employee1 = new Employee(empName1,y_int,workHours); 
} 

現在,員工是在一個名爲「僱員」類的構造函數,這裏是類:

class Employee { 
public: 

Employee(const char* employeeName, int salary, const char** workingHours); 

char* getName(); 

int getSalary(); 

int calcWeeklySalary(); 

virtual ~Employee(); 


private: 
     char name[MAX_LINE_SIZE]; 
     int empSalary_; 
     char* workHours[7]; 
}; 

和構造函數的實現:

Employee:: Employee(const char* employeeName, int salary, const char** workingHours) 
    { 
     int i=0; 
     strcpy(name,employeeName); 
     empSalary_=salary; 
     for(i=0; i<7; i++) 
     { 
     strcpy(workHours[i] ,workingHours[i]); 
     } 

    } 

我想一個字符串從「員工」到「名」(一PRIVA複製te類變量),也可以使用strcpy從「workingHours [i]」到「workHours [i]」(類的private),strcpy第二個參數必須是const char *。
所以,我的問題是:這是合法的,我做了什麼?我的意思是 - 「員工」是char *,「workingHours」是char **,而在Employee的簽名中,我寫了「const」。

如果不是,是否還有其他方法將字符串從Employee參數(由main發送)複製到類的私有變量中?

+2

你爲什麼不嘗試編譯它,並讓編譯器告訴你它是否合法?你甚至寫過代碼,哈哈。編寫問題可能比編寫代碼更多的工作。如果你正在處理'C++'中的字符串並且有選項,那麼可能一個好的建議是鼓勵使用'std :: string'。他們比ANSI字符串IMO更友好。 – luk32

+0

這沒關係,因爲你不是試圖不更新點的內容 – michaeltang

+0

@ luk32嗯,你是對的,我應該!但是我現在正在使用的編譯器遇到問題;我不想浪費時間 – user2750466

回答

1

假設employeeName =「hello」 使用const char * employeeName作爲參數意味着你不能更新點的內容,我表示你不能更改hello to hallo。你的代碼是可以的

+0

事情是,我發送一個char *到const char *,我認爲這可能有問題。 – user2750466

+0

char **不能轉換爲const char **試試這個definittion Employee(const char * employeeName,int salary,char * const * workingHours) – michaeltang

相關問題