2015-01-07 65 views
-6
void Emplyee::setname (char Name[50]) 
{ name [50] = Name [50] ;  } 

void Emplyee::setadress (char Adress [100]) 
{ adress [100] = Adress [100] ;  } 

Number.setname (Name [50]); \\ Error in this Line 

Number.setadress (Adress [100]); \\ Error in this Line 
+0

爲什麼'char'數組而不是'std :: string'?無論如何,你似乎誤解了數組下標的概念。 – Michael

+0

你應該用你的代碼添加說明。 –

+0

[**請閱讀此**](https://stackoverflow.com/help/how-to-ask)。 – WhozCraig

回答

2

你宣佈你的函數參數是char[]類型,但你調用一個字符數組的元素,這是char類型的功能。只需調用函數NameAdress

你的代碼在使用數組時遇到了其他問題,但是這會解決編譯器錯誤。它不會解決你會看到其他問題...

我會指出其中的一些出來......

void Emplyee::setname (char Name[50]) 
{ 
    name [50] = Name [50] ; // this line won't do what you think it does. (look at strcpy...) 
     //^  ^
     // |-----------|------ also, subscript out of bounds... 
} 

而且,用相同的地址。

char name[50]; // declares an array of chars, called name, with a size of 50 elements 
// ... 
char c = name[50]; // access the 50th element (out of bounds, btw) of the name array, and assign to c. has nothing to do with size. 
+0

雖然我高度懷疑數組下標超出了'name []'的範圍,但沒有明確的證據表明它不足以接受'50'的下標。然而,對於Name []'來說,*非常可能是正確的,但是即使在那裏作爲一個參數,數字也變得毫無意義,因爲無論如何'Name'都被轉換爲'char *'。 – WhozCraig

+0

@WhozCraig是的,理解。我根據OP使用下標作爲全尺寸的用法做了一個猜測,並且決定指出更容易將其看作下標越界,而不是可能產生的有效下標在未定義的行爲中,如果超過緩衝區長度。 –

1
name [50] = Name [50] ; 

這不會做你認爲它,它會覆蓋名稱的元素51名的元素51。它不會複製整個數組,只是一個元素。這也可能是一個緩衝區溢出錯誤。

這整個代碼表明你不明白數組,我認爲你現在已經少了std :: string的麻煩。 這裏有一個簡單的例子,根據你寫的:

#include <string> 

class Emplyee{ 
    std::string address, name; 

public: 
    void setname (std::string Name) 
    { name = Name ;  } 

    void setadress (std::string Adress) 
    { adress = Adress ;  } 
}; 

Emplyee Number; 

Number.setname ("AAAA"); 

std::string Address = "Your address here"; 
Number.setadress (Address); 

最後,我想說的是評論//沒有\\,它是很好的嘗試,尊重語言的命名約定時可能的一致性。

相關問題