2010-12-12 44 views
1

在C++中使用strcopy,我有一個名爲 「Student.h」如何在C++

class LinkedList { 
private: 

class Student { 
public: 

    int stId; 
    char stName [20]; 
    char stMajor[20]; 
    double stAverage; 
    Student * next; 

    Student() { 
     next = 0; 
    } 

    Student(int stId, char stName [20], char stMajor[20], double stAverage) { 
     this.stId = stId; 
     strcopy(this.stName, stName); // there is error here ! 
     strcopy(this.stMajor, stMajor); 
     this.stAverage = stAverage; 
    } 

文件,我應該怎麼辦?!

+3

'strcopy()'? '的strcpy()'? – 2010-12-12 16:14:21

回答

7

this是在C++中的指針,而不是如參考在Java中。另外,您需要的是strcpy()strcopy()

試試這個

strcpy(this->stName, stName); 
    strcpy(this->stMajor, stMajor); 

PS:在C++中,它總是建議喜歡std::string對C風格的數組

更清潔你的代碼的版本將是像這樣的東西

struct Student { 

    int stId; 
    std::string stName; 
    std::string stMajor; 
    double stAverage; 
    Student * next; 

    Student():stId(),stAverage(),next()//prefer initialization-list to assignment 
    { 
    } 

    Student(int stId, const std::string &stName, const std::string &stMajor, double stAverage){ 
     this->stId = stId, 
     this->stName = stName , 
     this->stMajor = stMajor, 
     this->stAverage = stAverage;   
    } 
}; 
+0

@Prasoon:請不要讓人們通過值來傳遞'std :: string',就像你當前的std :: string stMajor'一樣。請使'std :: string const&stMajor'。壞習慣很難擺脫,最好從好習慣開始:-) – 2010-12-12 16:26:15

+0

這是一個C++的作業,我沒有時間學習 – 2010-12-12 16:30:22

+1

@soad:你放下學習C++的工作,而你沒有學習的時間?好吧,那你就搞砸了。 – 2010-12-12 16:32:22

0

this是一個指針,而不是一個參考,所以你必須使用指針引用運營商:

strcpy(this->stName, stName); 

strcpy((*this).stName, stName); 

而且,我不推薦使用char[20]作爲一個數據類型學生姓名 - 這很容易發生緩衝區溢出錯誤。您可以通過使用strncpy

strcpy(this->stName, stName, 19); 
    this->stName[20]=0; 

但最方便的方法是使用std::string,可以通過轉讓方便地複製克服這一點。最後,如果您爲成員變量名稱選擇了一些約定,則可以在不使用this的情況下引用它們。例如:

class Student { 
public: 

    std::string m_stName; 

... 
    Student(int stId, std::string stName, ...) { 
     m_stName=stName; 

或甚至(使用初始化):

Student(int stId, std::string stName, ...) : m_stName(stName) { 
    m_stName=stName; 
1

我認爲你的意思是strcpy函數(沒有)。

0

您不能使用std::string

string s1, s2 = "example"; 
s1 = s2; 

無論如何,問題是,在C++ this返回指針,因此this.stId是錯誤的,正確的形式將是this->stId,或者可替換地(*this).stId

2

我該怎麼辦?

您應該:

  • 使用std::string,而不是原始數組。

  • 使用std::list而不是發明自己的(除了學習鏈接列表的目的)。

  • 沒有指出正式參數中的數組大小,比如你的char stName [20];正式參數類型不保留大小信息,它只是指向一個指針類型。

  • 一般避免直接使用this

  • 通常在構造函數體中使用初始化列表而不是賦值。

乾杯&心連心,