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
回答
你宣佈你的函數參數是char[]
類型,但你調用一個字符數組的元素,這是char
類型的功能。只需調用函數Name
和Adress
你的代碼在使用數組時遇到了其他問題,但是這會解決編譯器錯誤。它不會解決你會看到其他問題...
我會指出其中的一些出來......
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.
雖然我高度懷疑數組下標超出了'name []'的範圍,但沒有明確的證據表明它不足以接受'50'的下標。然而,對於Name []'來說,*非常可能是正確的,但是即使在那裏作爲一個參數,數字也變得毫無意義,因爲無論如何'Name'都被轉換爲'char *'。 – WhozCraig
@WhozCraig是的,理解。我根據OP使用下標作爲全尺寸的用法做了一個猜測,並且決定指出更容易將其看作下標越界,而不是可能產生的有效下標在未定義的行爲中,如果超過緩衝區長度。 –
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);
最後,我想說的是評論//沒有\\,它是很好的嘗試,尊重語言的命名約定時可能的一致性。
- 1. 錯誤:從'char'無效轉換爲'char *'
- 2. shared_ptr編譯器錯誤無效轉換
- 3. 錯誤:從 '爲const char *' 的無效轉換到 '字符*'
- 4. 錯誤:從「字符」無效的轉換爲「爲const char *
- 5. 從字符*無效轉換爲char
- 6. 無法從字符串轉換成char
- 7. MVN編譯錯誤無效換行符
- 8. Visual Basic編譯錯誤 - 無效字符
- 9. char從'char *'無效轉換爲'char'[-fpermissive]
- 10. 爲什麼錯誤「從'char'無效轉換爲'const char *'?
- 11. 錯誤:從'char'到'const char'的轉換無效
- 12. 如何解決「從'char *'到'char'錯誤的無效轉換?
- 13. 從「const char *」到「char」錯誤的轉換無效
- 14. 錯誤:無效從'char *'轉換爲'char'行26,36
- 15. 編譯時出錯:從'void *'無效轉換爲'無符號字符*'
- 16. 轉換字符串時編譯錯誤
- 17. 編譯器錯誤:int *無效轉換爲無符號整型* [-fpermissive]
- 18. Gl3w編譯錯誤:從無效轉換「PROC ......爲void *」
- 19. 編譯錯誤:從'int'無效轉換爲'int *'[-fpermissive] |
- 20. 從'char'到'const char *'無效轉換
- 21. 從'char'到'const char *'的轉換無效
- 22. 從'char *'到'char'無效轉換[-fpermissive]
- 23. 「從'const char *'無效轉換爲'char'[-fpermissive]」
- 24. 從'char *'無效轉換爲'char'
- 25. 從char *到char的轉換無效?
- 26. 從'char *'到'char [-fpermissive]的轉換無效
- 27. 從'const char *'到'char *'的無效轉換
- 28. 轉換無效從CHAR爲const char *
- 29. 錯誤:從「常量字符*」到「字符*」無效的轉換[-fpermissive]
- 30. ANTLRWorks錯誤編譯語法:「語法錯誤:無效字符文字:無效」
爲什麼'char'數組而不是'std :: string'?無論如何,你似乎誤解了數組下標的概念。 – Michael
你應該用你的代碼添加說明。 –
[**請閱讀此**](https://stackoverflow.com/help/how-to-ask)。 – WhozCraig