2014-01-07 4 views
0

내가 주에 다음 코드를 작성 : 이제

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

    } 

내가 "직원"을 "이름"(A priva에서 문자열을 복사 할 te 변수), "workingHours [i]"에서 "workHours [i]"(클래스의 private 클래스)까지, strcpy를 사용하여 볼 수 있습니다. strcpy 2 번째 파라미터는 알려진대로 const char *이어야합니다.
제 질문은 : 제가 한 일은 합법적입니까? 제 말은 "employee"가 char *이고 "workingHours"가 char **이고, Employee의 서명에서 "const"를 썼습니다.

그렇다면 다른 방법으로 클래스의 private 변수에 Employee의 매개 변수 (main에서 보낸)의 문자열을 복사 할 수 있습니까?

+2

왜 그것을 컴파일하려고하지 컴파일러가 합법적인지 여부를 알려주지? 심지어 코드를 작성한 사람도 있습니다. 코드를 작성하는 것보다 질문을 작성하는 것이 더 많은 일입니다. 'C++ '로 문자열을 처리하고 옵션을 가지고 있다면'std :: string'의 사용을 권장하는 것이 좋습니다. 그들은 ansi c 스타일 문자열 IMO보다 사용하기에 더 친숙합니다. – luk32

+0

포인트의 내용을 업데이트하지 않으려 고하지 않기 때문에 괜찮습니다. – michaeltang

+0

@ luk32 글쎄, 맞았어야 했어! 하지만 지금 사용하고있는 컴파일러에 문제가 있습니다. 그리고 나는 그 사이에 시간을 낭비하고 싶지 않았다! – user2750466

답변

1

직원 이름이 "hello"인 경우 const char * employeeName을 매개 변수로 사용한다는 것은 포인트의 내용을 업데이트 할 수 없다는 것을 의미합니다. hello를 hallo로 변경할 수 없음을 나타냅니다. 그것은 당신의 코드와 함께 괜찮습니다

+0

문제는 const char *에 char *를 보내는 것이므로 문제가 될 수 있다고 생각합니다. – user2750466

+0

char **를 const char로 변환 할 수 없습니다. **이 definition을 시도하십시오. Employee (const char * employeeName, int salary, char * const * workingHours) – michaeltang