2014-01-07 3 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]); 
     } 

    } 

Я хочу, чтобы скопировать строку из «работника» на «имя» (а Прива te variable в классе), также от «workingHours [i]» до «workHours [i]» (частный класс), используя strcpy, как вы можете видеть, и strcpy 2-й параметр должен быть const char * как известно.
Итак, мой вопрос: является ли это законным то, что я сделал? Я имею в виду, что «сотрудник» - char *, а «workingHours» - char **, а в подписи Employee я написал «const».

А если нет, есть ли другой способ скопировать строки из параметров Работника (отправленных главным образом) в частные переменные класса?

+2

Почему вы не пытаетесь его скомпилировать, а компилятор сказать вам, является ли это законным или нет? Вы даже написали код, LOL. Вероятно, больше работы написать вопрос, чем попытаться создать код. Также, вероятно, хорошим советом было бы поощрение использования 'std :: string', если вы имеете дело со строками в' C++' и имеете опцию. Они более удобны в использовании, чем строки стиля IMI. – luk32

+0

Это нормально, так как вы не пытаетесь обновить содержимое точки – michaeltang

+0

@ luk32 Ну, вы правы, я должен был! но у меня возникают проблемы с компиляторами, которые я использую прямо сейчас; и я не хотел терять время тем временем! – user2750466

ответ

1

Предположим, что employeeName = "hello" using const char * employeeName как параметры означает, что вы не можете обновить содержимое точки, я указываю, что вы не можете изменить привет в hallo. Это нормально с вашим кодом

+0

Дело в том, что я отправляю char * в const char *, я думал, что это может быть проблематично. – user2750466

+0

char ** не может быть преобразован в const char ** попробовать это определение Employee (const char * employeeName, int зарплата, char * const * workingHours) – michaeltang

Смежные вопросы