2011-01-22 108 views
1

在:http://www.learncpp.com/cpp-tutorial/82-classes-and-class-members/C++ - 類問題

有以下程序(我做了一些小的修改):

#include <iostream> 

class Employee 
{ 
public: 
    char m_strName[25]; 
    int m_id; 
    double m_wage; 

    //set the employee information 
    void setInfo(char *strName,int id,double wage) 
    { 
     strncpy(m_strName,strName,25); 
     m_id=id; 
     m_wage=wage; 
    } 

    //print employee information to the screen 
    void print() 
    { 
     std::cout<<"Name: "<<m_strName<<"id: "<<m_id<<"wage: $"<<wage<<std::endl; 
    } 
}; 

int main() 
{ 
    //declare employee 
    Employee abder; 
    abder.setInfo("Abder-Rahman",123,400); 
    abder.print(); 
    return 0; 
} 

當我嘗試編譯它,我得到如下:

alt text

而且,爲什麼在這裏使用了一個指針? void setInfo(char *strName,int id,double wage)

謝謝。

+0

爲什麼沒有縮進? – 2011-01-22 14:22:19

回答

1

1.

strncpy(m_strName,strName,25); 

你需要#include <cstring>(其中strncpy()函數聲明)。

2.

std::cout<<"Name: "<<m_strName<<"id: "<<m_id<<"wage: $"<<wage<<std::endl; 

應該是

std::cout<<"Name: "<<m_strName<<"id: "<<m_id<<"wage: $"<<m_wage<<std::endl; 

3。

void setInfo(char *strName,int id,double wage) 

可以設置爲

void setInfo(const char *strName,int id,double wage) 

擺脫了G ++ 4.x.x警告。

1

添加

#include <string.h> 

而改變工資m_wage上線19

+0

請不要混合使用C++和C頭文件。 – 2011-01-22 14:51:01

5

你必須包括聲明strncpy函數的頭。所以加上

#include <cstring> 

在開頭。

成員名稱爲m_wage,但是您在print成員函數中使用它作爲wage

變化

std::cout<<"Name: "<<m_strName<<"id: "<<m_id<<"wage: $"<<wage<<std::endl; 

std::cout<<"Name: "<<m_strName<<"id: "<<m_id<<"wage: $"<<m_wage<<std::endl; 
                 ^^^^^^ 
1

您需要:

#include <string> 
#include <iostream> 
#include <string.h> 
+2

請不要混合使用C++和C頭文件。 – 2011-01-22 14:52:06

1

至於最後的警告/錯誤消息 - setInfo()成員函數的第一個參數應被聲明爲const char*。普通char*表示指向可變的字符數組,該字符串文字"Abder-Rahman"不是。

1

錯誤是因爲strncpy是在cstring頭文件中聲明的。

使用了一個指針,因爲您正在處理C字符串,它們是char數組。 C中的數組通過指針使用。並且strncpy需要兩個指向char(char數組)的指針來執行復制過程。

+0

「請不要混合使用C++和C頭文件。」 - 康拉德魯道夫:) – 2011-01-22 15:54:28

+0

感謝您的回覆。當你說:「通過指針使用C中的數組」時,那麼在C + =中如何使用數組?謝謝。 – Simplicity 2011-01-22 20:21:19